程序相关代码内存分配

1.C++

栈:

就是那些由编译器在需要的时候分配,
在不需要的时候自动清除的变量的存储区。
里面的变量通常是局部变量、函数参数等。
在一个进程中,位于用户虚拟地址空间顶部
的是用户栈,编译器用它来实现函数的调用。
和堆一样,用户栈在程序执行期间可以动态地扩展和收缩。
 
堆:
就是那些由 new 分配的内存块,他们的释放编译器不去管,
由我们的应用程序去控制,一般一个 new 就要对应一个 delete
如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。
堆可以动态地扩展和收缩。
 
自由存储区,
就是那些由 malloc 等分配的内存块,他和堆是十分相似的,
不过它是用 free 来结束自己的生命的。
 
全局/静态存储区,
全局变量和静态变量被分配到同一块内存中,
在以前的 C 语言中,全局变量又分为初始化的
和未初始化的(初始化的全局变量和静态变量在一块区域,
未初始化的全局变量与静态变量在相邻的另一块区域,
同时未被初始化的对象存储区可以通过 void* 来访问和操纵,
程序结束后由系统自行释放),在 C++ 里面没有这个区分了,
他们共同占用同一块内存区。
 
常量存储区,
这是一块比较特殊的存储区,他们里面存放的是常量,不允许修改
 
2.C
栈区(stack):存放函数形参和局部变量(auto类型),由编译器自动分配和释放
堆区(heap):该区由程序员申请后使用,需要手动释放否则会造成内存泄漏。如果程序员没有手动释放,那么程序结束时可能由OS回收。
全局/静态存储区:存放全局变量和静态变量(包括静态全局变量与静态局部变量),初始化的全局变量和静态局部变量放在一块,未初始化的放在另一块
文字常量区:常量在统一运行被创建,常量区的内存是只读的,程序结束后由系统释放。
程序代码区:存放程序的二进制代码,内存由系统管理
posted @ 2019-07-23 18:31  莫负年华向东流  阅读(155)  评论(0编辑  收藏  举报