关于C++的内存格局
C++程序的内存格局通常分为四个区:
1 全局数据区(data area)
2 代码区(code area)
3 绽区(stack area)
4 堆区(即自由存储区)(heap area)
全局变量、静态数据、常量存放在全局数据区
所有所有类成员函数和非成员函数代码存放在代码区
为运行函数而分配的局部变量、函数参数、返回数据、返回地址等存放在栈区
余下的空间都被作为堆区
函数“void *malloc(size_t);”和"void free(void *);"在头文件malloc.h中声明,而操作符new和delete是C++语言的一部分,无须包含头文件。他们都从堆中分配和释放内存,但在具体操作上两者有很大的区别。
操作堆内存时,如果分配了内存,就有责任回收塔,否则运行的程序将会造成内存泄露。这与函数中在栈区中分配局部变量有本质的不同。
对C++来说,管理堆区是一件十分复杂的工作,频繁的分配和释放不同大小的堆空间,将会产生堆内存碎块!
摘自《C++程序设计教程——设计思想与实现》 钱能著