大数跨境
0
0

C++内存管理

C++内存管理 易道云信息院
2023-09-03
0
导读:C++内存管理

一、new 和malloc 的区别

1)都可用来申请动态内存和释放内存,都是在堆(heap)上进行动态的内存操作。

2)malloc和free是c语言的标准库函数,new/delete是C++的运算符。

3)new会自动调用对象的构造函数,delete 会调用对象的析构函数, 而malloc返回的都是void指针。

4)对于非内部数据类型的对象而言,光用malloc和free无法满足动态对象的要求。

5)因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以一个能完成清理与释放内存工作的运算符delete。注意new/delete不是库函数。

二、C++的内存分配

在C++中,内存分为5个区,他们分别是:

  • 堆区:一般由程序员自动分配,如果程序员没有释放,程序结束时可能有OS回收。其分配类似于链表。

  • 栈区:由编译器自动分配和释放,存放为运行函数分配的局部变量,函数参数,返回数据,返回地址等,其操作类似于数据结构总的栈。

  • 全局区(静态区static):存放全局变量,静态变量,常量。结束后由系统释放。

  • 常量区(文字常量区):存放常量字符串,程序结束后有系统释放。

  • 代码区:存放函数体(类成员函数和全局区)的二进制代码。

三、简述c、C++程序编译的内存分配情况

  • 从静态存储区域分配:

内存在程序编译时就已经分配好,这块内存在程序的整个运行期间都存在 。速度快、不容易出错 , 因为有系统会善后。例如全局变量, static 变量, 常量字符串等。

  • 在栈上分配:

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

  • 从堆上分配:

即动态内存分配。程序在运行的时候用 malloc 或 new 申请任意大小的内存,程序员自己负责在何时用 free 或delete 释放内存。动态内存的生存期由程序员决定,使用非常灵活。如果在堆上分配了空间,就有责任回收它,否则运行的程序会出现内存泄漏 ,另外频繁地分配和释放不同大小的堆空间将会产生堆内碎块 。

END

下期精彩继续

等你来哦

👇👇👇

【声明】内容源于网络
0
0
易道云信息院
致力成为编程领域最值得信赖的学习服务平台
内容 35
粉丝 0
易道云信息院 致力成为编程领域最值得信赖的学习服务平台
总阅读0
粉丝0
内容35