動态存儲區(堆)、動态存儲區(棧)、靜态存儲區、程式代碼區
動态存儲區(堆):(動态配置設定)
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\n", &p1, &p2);//位址在棧上
11 printf("%x,%x\n", 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 }