C語言進階之路(一)----C語言的內存四區模型


內存四區模型:
操作系統給C/C++編寫的程序分配內存,通常將分配的內存划分為以下四個區域:
1.棧區:存放局部變量,用完由操作系統自動釋放
2.堆區:動態分配給程序的內存區域,由程序員手動釋放
3.數據區:
分為兩種:
(1)常量區:存放常量,一般是字符串常量
(2)全局區/靜態區:存放全局變量和靜態變量
4.代碼區:
存放可執行代碼的區域

示例如下:

 1 int main()
 2 {
 3     char buf1[10] = "aaaa";
 4 
 5     char buf2[] = "bbbb";
 6 
 7     char *p1 = "1111";
 8 
 9     //動態分配內存
10     char *p2 = (char *)malloc(10*sizeof(char));
11 
12     strcpy(p2, "3333");
13 
14     return 0;
15 }

 

內存四區圖:

 

 補充:

棧的生長方向和數組內元素的存放方向相反
堆的生長方向和數組內元素的存放方向相同

驗證:

 1 #include <stdio.h>
 2 
 3 int main()
 4 {
 5     char buf1[10] = "aaaa";
 6     char buf2[] = "bbbb";
 7     char *p1 = "1111";
 8     //動態分配內存
 9     char *p2 = (char *)malloc(10 * sizeof(char));
10     strcpy(p2, "3333");
11 
12     printf("buf1的地址是%d\n", buf1);
13     printf("buf1的地址是%d\n", buf2);
14 
15     printf("======================\n");
16 
17     printf("buf[0]的地址是%d\n", &buf1[0]);
18     printf("buf[0]的地址是%d\n", &buf1[1]);
19 
20     printf("======================\n");
21 
22     printf("p2[0]的地址是%d\n", &p2[0]);
23     printf("p2[1]的地址是%d\n", &p2[1]);
24 
25     return 0;
26 }

 

打印結果:

說明棧的生長方向是向下的,數值逐漸減小;棧中數組的元素的存放方向與之相反,是向上的,數值逐漸增大;堆的生長方向向上,數值逐漸增大。

 


免責聲明!

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



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