C++内存管理

利用C++语言进行程序开发,如果内存管理不当将会出现内存泄露等问题,因此C++内存管理式C++程序开发中非常重要的环节。

在C++中,内存分为:堆、栈、全局/静态存储区和常量存储区。

堆:由new分配的内存块,内存释放由程序员控制,一个new要对应一个delete。如果程序员没有释放,则程序运行结束后操作系统会自动回收。C语言提供的动态内存分类函数为malloc()和free(),这些函数在运行时从堆(也称自有内存)中分配存储单元。

栈:函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元被自动释放。效率高但是空间有限。

全局/静态存储区:全局变量和静态变量。

常量存储区:存放常量,不能修改。

堆和栈的区别

void f() { int* p=new int[5]; }
p在栈内存,new出来的空间在堆内存。释放内存delete []p.
区别:
(1)管理方式不同。栈由编译器自动管理;堆由程序员控制,容易memory leak;
  (2)空间大小不同。32位操作系统堆内存可以达到4G空间。栈空间较小;
(3)能否产生碎片不同:对于堆,频繁的new/delete会造成内存空间不连续,从而造成大量的碎片,使程序效率降低。对于栈,不存在这个问题,因为栈是先进后出的队列,一一对应。
(4)生长方向:堆向上生长,也就是向着内存地址增加的方向;栈向下
(5)分配方式:堆是动态分配的,没有静态分配的堆。栈有两种分配方式:静态和动态。静态分配由编译器完成,如局部变量的分配。动态分配由alloca函数进行分配。
(6)分配效率不同:栈效率比较高。堆效率低。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值