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

内存四区模型:
操作系统给C/C++编写的程序分配内存,通常将分配的内存划分为以下四个区域:
1.栈区:存放局部变量,用完由操作系统自动释放
2.堆区:动态分配给程序的内存区域,由程序员手动释放
3.数据区:
分为两种:
(1)常量区:存放常量,一般是字符串常量
(2)全局区/静态区:存放全局变量和静态变量
4.代码区:
存放可执行代码的区域

示例如下:

int main()  
{  
    char buf1[10] = "aaaa";  
  
    char buf2[] = "bbbb";  
  
    char *p1 = "1111";  
  
    //动态分配内存  
    char *p2 = (char *)malloc(10*sizeof(char));  
  
    strcpy(p2, "3333");  
  
    return 0;  
}  

 

 

 

内存四区图:

 

 补充:

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

验证:

 

#include <stdio.h>

int main()
{
    char buf1[10] = "aaaa";
    char buf2[] = "bbbb";
    char *p1 = "1111";
    //动态分配内存
    char *p2 = (char *)malloc(10 * sizeof(char));
    strcpy(p2, "3333");

    printf("buf1的地址是%d\n", buf1);
    printf("buf1的地址是%d\n", buf2);

    printf("======================\n");

    printf("buf[0]的地址是%d\n", &buf1[0]);
    printf("buf[0]的地址是%d\n", &buf1[1]);

    printf("======================\n");

    printf("p2[0]的地址是%d\n", &p2[0]);
    printf("p2[1]的地址是%d\n", &p2[1]);

    return 0;
}

打印结果:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值