C++内存分配方式

内存分配的5个区域

由操作符new分配的空间,它们的释放不由编译器管理,需要程序员手动释放,或者在程序结束时由操作系统回收释放。

一般存储局部变量和函数参数,由编译器去分配

  • 自由存储区

与堆类似,但它是由malloc

  • 静态存储区

在C++中,全局变量和静态变量都存储在这

  • 常量存储区

比较好理解,就是存储常量的区域

堆和栈的区别

  • 堆是由程序员控制的,而栈是由编译器控制的

  • 堆的空间大小一般为4G,而栈相对较小,比如1M

  • 堆有可能产生碎片,而栈是先进后出的模式,不会产生碎片

  • 堆是自下往上,往高地址生长的;而栈则相反

  • 栈分配效率较高,只需要从寄存器中找到存放栈的地址;而堆比较麻烦,需要通过一定的算法找到内存大小合适的空间(链表),或者因为碎片太多,先进行压缩抖动等

引用自: http://www.cnblogs.com/daocaoren/archive/2011/06/29/2092957.html