发表时间:2022-03-25来源:网络
先看一段C语言代码:
int globalVar = 1; static int staticGlobalVar = 1; void Test() { static int staticVar = 1; int localVar = 1; int num1[10] = { 1, 2, 3, 4 }; char char2[] = "abcd"; char* pChar3 = "abcd"; int* ptr1 = (int*)malloc(sizeof(int) * 4); int* ptr2 = (int*)calloc(4, sizeof(int)); int* ptr3 = (int*)realloc(ptr2, sizeof(int) * 4); free(ptr1); free(ptr3); }globalVar->数据段(静态区)
staticGlobalVar->数据段(静态区)staticVar->数据段(静态区)localVar->栈num1->栈 char2->栈(栈帧)*char2->栈(栈帧)pChar3->栈(栈帧)*pChar3->代码段ptr1->栈(栈帧)*ptr1->堆 
栈:又叫堆栈,非静态局部变量/函数参数/返回值等等,栈是向下增长的;
内存映射段:是高效I/O映射方式,用于装载一个共享的动态内存库。用户可使用系统接口创建共享内存,做进程间通信;
堆:用于程序运行时动态内存的分配,堆是向上增长的;
数据段:存储全局数据和静态数据;
代码段:可执行的代码 / 只读常量;

注意:ptr2不需要释放,因为 realloc 只是对 ptr2的原有基础上进行了扩容,实际上用的是同一块内存空间;
共同点:都是程序猿从堆上申请空间的方法,并且需要手动释放或者在程序结束运行的时候自动释放,否则会造成内存泄露;
malloc:分配的内存是位于堆中的,并且没有初始化内存的内容,因此基本上malloc之后,调用函数memset来初始化这部分的内存空间;
calloc:将初始化这部分的内存;
realloc:则对malloc 、 realloc 申请的内存进行大小的调整;
alloca是从栈上申请内存空间,且不需要释放,由系统自动释放;
ptr1 ==> 动态申请了一个int类型的空间;
ptr2 ==> 动态申请了一个int类型的空间并初始化为10;
ptr3 ==> 动态申请了一个int型数组,数组大小是在[ ]中指定
注意:申请和释放单个元素的空间,使用 new 和 delete 操作符;申请和释放连续空间,使用 new[ ] 和 delete[ ];
下一篇:c++自学day2
皓盘云建最新版下载v9.0 安卓版
53.38MB |商务办公
ris云客移动销售系统最新版下载v1.1.25 安卓手机版
42.71M |商务办公
粤语翻译帮app下载v1.1.1 安卓版
60.01MB |生活服务
人生笔记app官方版下载v1.19.4 安卓版
125.88MB |系统工具
萝卜笔记app下载v1.1.6 安卓版
46.29MB |生活服务
贯联商户端app下载v6.1.8 安卓版
12.54MB |商务办公
jotmo笔记app下载v2.30.0 安卓版
50.06MB |系统工具
鑫钜出行共享汽车app下载v1.5.2
44.7M |生活服务
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-02-15
2022-02-14