動態存儲區(堆)、動態存儲區(棧)、靜態存儲區、程序代碼區


 

動態存儲區(堆)、動態存儲區(棧)、靜態存儲區、程序代碼區

 

動態存儲區(堆):(動態分配)

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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM