C/C++中的堆与栈

在一个函数内部定义了一个变量,或者向某个函数传递参数时,这些变量或参数存储在栈中。当退出变量作用域时,栈上的存储单元会被自动释放。一个程序使用的栈大小一般是固定的,由编译器决定。Visual Studio 2003默认的栈大小是1MB。由于栈是由系统自动分配的,压栈和出栈都是有相应的指令操作,因此栈的效率较高,分配的内存空间也是连续的。

当使用malloc或者new创建一个对象时,申请的内存是在堆上分配,堆上的内存通过free或delete手动释放,在实际使用的中容易忘记释放堆内存造成内存泄露。堆的大小只受限于系统有效的虚拟内存的大小,堆可以动态地管理数据,用来分配创建一些占用内存较大的对象或数据。堆在分配内存空间时按照一定的算法寻找适合大小的空闲堆,并修改相应的维护空闲空间的链表,然后返回地址给程序,因此堆的效率较低,容易产生内存碎片。

转载于:https://www.cnblogs.com/lc7cl/archive/2011/01/21/1941026.html

猜你喜欢

转载自blog.csdn.net/weixin_34380948/article/details/94602474