您的位置:首页 > 编程语言 > C语言/C++

C++内存详解

2015-09-05 15:55 330 查看
一.分配方式

在C++中,内存分为五个区:堆,栈,自由存储区,全局/静态存储区,常量存储区。

栈,在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时,这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。

堆,就是那些由new分配的内存块,他们的释放编译器不会去管,由程序员自己去释放。

自由存储区,就是那些由malloc等分配的内存块,他和堆相似,不过他是用free来结束自己的生命的。

全局/静态存储区,全局变量和静态变量被分配到这块内存中。

常量存储区,这是一块比较特殊的存储区,里面存放的是常量,不允许被修改。

二.堆和栈的区别

1.管理方式不同

2.空间大小不同

3.碎片问题

4.生长方向不同

管理方式不同:对于栈来说,是由编译器自动管理,无需我们手动控制;对于堆来说,释放工作‘由程序员控制,容易产生内存泄漏。

空间大小不同:一般在32位系统下,堆内存可达到4GB,但是对栈来讲,一般都是有一定大小的。

碎片问题:对于堆来说,频繁的new/delete会造成内存空间的不连续,从而造成大量的碎片,使程序效率降低。而对于栈来说就不存在这个问题,因为栈是先进后出的队列,这里参考数据结构就知道了。

生长方向不同:对于堆来说,生长方向是向上的,也就是向着内存地址增加的方向;对于栈,它的生长方向是向下的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: