程序中的内存布局

上午看了篇管局内存布局的文章,有点收获,特此理一下思路,总结一番. 程序只用在运行的时候才会加载到内存; 程序没有运行前,虽没有加载到内存,但内存布局可以提前规划,当运行加载内存时,即可用规划好的内存加载。 text(代码区):函数,只读,函数入口地址。 data(数据区):初始化的数据,全局变量、static变量、文字常量区。 bss (未初始化数据):未初始化的全局变量。 heap(堆区):由用户手动申请和释放。 stack(栈区):程序自动申请空间自动释放,非static局部变量。启动后分配。 众所周知,如果只是动态分配空间而不释放,必然导致内存泄露。 1. 栈区普通变量 让指针指向栈区变量,生命周期无需手段管理,其只有作用域的限制。 2.指针指向堆区空间 成功分配内存,则返回堆区首地址; 分配失败,则返回NULL。 需要注意的是malloc()函数越界情况,大小设定0也能编译通过,但必定出错。 free()函数释放的不是变量,释放的是指向的内存,但同一块内存不能连续释放。

Read More