会议专属网站平台建设报价单,建设集团英文缩写,四川建设岗培注册中心官网,大一做家教的网站一#xff0c;内存分布
栈区#xff1a;
一般的局部变量和函数的返回数据以及返回地址#xff0c;函数的参数都在战栈区上开辟空间。栈区开空间一般由编译器自动管理#xff0c;出了生命周期自动释放。也可以通过一些方式自己手动开辟栈区空间#xff0c;不过一般用不到…一内存分布
栈区
一般的局部变量和函数的返回数据以及返回地址函数的参数都在战栈区上开辟空间。栈区开空间一般由编译器自动管理出了生命周期自动释放。也可以通过一些方式自己手动开辟栈区空间不过一般用不到。
关于栈区空间开辟和释放空间的具体过程可以了解一下以下文章
C语言的函数栈帧动画展示详细过程_南山忆874的博客-CSDN博客
堆区
一般由程序员自己开辟和管理存放一些程序运行时的变量主要通过malloc/new free()/delete的方式进行(下面详谈)如果程序未释放堆内容程序结束时操作系统会自动回收(最好不要这样)。
全局区(静态区)
一般存放全局变量和被static修饰的静态变量由系统自动管理和释放。全局区分为已初始化全局区和未初始化全局区
常量区:
存放字符串常量只有读权限没有写权限后由系统自动管理和释放
代码区 存放函数体类成员函数、静态函数和全局函数静态成员函数的二进制代码。
配图 二malloc/new free()/delete的区别
在C语言中我们使用malloc和free来管理开辟空间在C中有自己的一套内存管理体系new和delete。
注意虽然C是向下兼容C的但是使用内存管理的时候最好不要混用上面两者可能会导致内存泄漏。
使用malloc就使用free释放使用new就使用delete释放当我们想要使用new开出多个空间时就要使用delete[] 释放。
#include iostream
using namespace std;int main()
{int* n new int;int* m (int*)malloc(sizeof(int));int* a new int[4];//4个intdelete n;//delete m; ×//free(n); ×free(m);delete[] a;//加[]return 0;
}
值得一提的是new和delete以及delete[]的底层其实也是调用的malloc和free只不过C在具体的细节上又对其进行了封装时的C自成一套内存管理体系malloc和free是函数而new和delete是关键字。