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 }

 

內存四區圖:spa

 

 補充:操作系統

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

驗證:blog

 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 }

 

打印結果:內存

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

相關文章
相關標籤/搜索