动态存储区(堆)、动态存储区(栈)、静态存储区、程序代码区

动态存储区(堆)、动态存储区(栈)、静态存储区、程序代码区

动态存储区(堆):(动态分配)

malloc动态分配在heap堆区。

动态存储区(堆),程序员自己分配自己释放。

动态存储区(栈):(动态分配)

自动变量、const变量在stack栈区。

动态存储区(栈),系统自动分配释放。

静态存储区:(静态分配)

extern全局变量,在static静态存储区。

静态存储区,一旦分配,不会被回收,可读可写

程序代码区:(静态分配)

main函数、其他函数在code程序代码区。

程序代码区,一旦分配,可读不可写,不可改变

堆和栈

 1 #define _CRT_SECURE_NO_WARNINGS
 2 
 3 #include<stdio.h>
 4 #include<stdlib.h>
 5 
 6 main()
 7 {
 8     void *p1 = malloc(20);
 9     void *p2 = malloc(30);
10     printf("%x,%x
", &p1, &p2);//地址在栈上
11     printf("%x,%x
", p1, p2);//在堆区
12 
13     system("pause");
14 }

 1 #define _CRT_SECURE_NO_WARNINGS
 2 
 3 #include<stdio.h>
 4 #include<stdlib.h>
 5 #include<windows.h>
 6 
 7 main()
 8 {
 9     //堆,不知道要用多少内存的时候,需要手动释放
10     //堆可以处理很大的内存
11     //堆就是malloc或者realoc或者calloc分配的内存
12 
13     while (1)
14     {
15         void *p = malloc(1024 * 1024 * 30);
16         Sleep(2000);
17         free(p);
18         Sleep(2000);
19     }
20 
21     system("pause");
22 }

 1 #define _CRT_SECURE_NO_WARNINGS
 2 
 3 #include<stdio.h>
 4 #include<stdlib.h>
 5 
 6 main()
 7 {
 8     //栈,用完了内存就立刻回收,再次利用
 9 
10     while (1)
11     {
12         double x[1024 * 50 * 200];
13     }
14 
15     system("pause");
16 }
原文地址:https://www.cnblogs.com/denggelin/p/5540120.html