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 }

内存四区图:

C语言进阶之路(一)----C语言的内存四区模型

补充:

栈的生长方向和数组内元素的存放方向相反

堆的生长方向和数组内元素的存放方向相同

验证:

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的地址是%dn", buf1);
13     printf("buf1的地址是%dn", buf2);
14 
15     printf("======================n");
16 
17     printf("buf[0]的地址是%dn", &buf1[0]);
18     printf("buf[0]的地址是%dn", &buf1[1]);
19 
20     printf("======================n");
21 
22     printf("p2[0]的地址是%dn", &p2[0]);
23     printf("p2[1]的地址是%dn", &p2[1]);
24 
25     return 0;
26 }

打印结果:

C语言进阶之路(一)----C语言的内存四区模型

说明栈的生长方向是向下的,数值逐渐减小;栈中数组的元素的存放方向与之相反,是向上的,数值逐渐增大;堆的生长方向向上,数值逐渐增大。

原文链接: https://www.cnblogs.com/crazyzhang/p/5727822.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/238664

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月13日 下午5:54
下一篇 2023年2月13日 下午5:54

相关推荐