天天看點

動态存儲區(堆)、動态存儲區(棧)、靜态存儲區、程式代碼區

動态存儲區(堆)、動态存儲區(棧)、靜态存儲區、程式代碼區

動态存儲區(堆):(動态配置設定)

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 }