C语言在内存中一共分为如下几个区域,分别是: 1. 内存栈区: 存放局部变量名; 2. 内存堆区: 存放new或者malloc出来的对象; 3. 常数区: 存放局部变量或者全局变量的值; 4. 静态区: 用于存放全局变量或者静态变量; 5. 代码区:二进制代码。 知道如上一
C语言在内存中一共分为如下几个区域,分别是:
1. 内存栈区: 存放局部变量名; C/C++不提供垃圾回收机制,因此需要对堆中的数据进行及时销毁,防止内存泄漏,使用free和delete销毁new和malloc申请的堆内存,而栈内存是动态释放。 C/C++内存区域划分详解 C/C++内存分布
C/C++中,内存主要分为、堆、栈、全局/静态存储区和常量存储区。 栈:栈又叫堆栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区。里面的变量通常是局部变量、函数参数等,是向下增长的。所谓向下生长的就是,先调用的栈帧的地址比后调用的地址大,栈一般大小有几个M左右。
堆:就是那些由new/malloc分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new/malloc就要对应一个delete/free,由程序员主动释放。堆是可以上增长的.意思是先建立的堆的地址小于后建立的堆的地址。
数据段:存储全局数据和静态数据。 知道了内存分布,下面就来做题吧,考验知识的时候到了,看看会做几题吧
是不是前几题还得心应手,后面就有点懵了
栈和堆的区别:
栈:由编译器自动分配并且释放,一般存储函数的参数局部变量等
1、申请内存方式
堆:由程序员申请,需要制定大小(动态分配) 栈:只要剩余空间大于申请内存,系统就会提供,否则会栈溢出 堆:便历空闲地址链表,找到符合要求的,就删除该地址分配给程序,内存的首地址记录分配的大小,(方便delete)多余的内存回收
3、空间大小不同 |
2022-05-13
2022-03-10
2021-07-02
2021-08-14
2021-05-17