C语言的内存布局规律

C语言的内存布局规律

命令行参数和环境变量
栈(函数执行的内存区域,通常和堆共享同一片区域)
(未使用内存空)
堆(存放进程运行中被动态分配的内存段,大小不固定,可动态扩展或缩小)
bss段(存放为初始化的全局变量和静态变量,运行前自动初始化为0)
数据段(存放已经初始化的全局变量和局部静态变量)
代码段(用来存放程序执行代码,只读)

堆和栈的区别

  • 申请方式:

    • 堆由程序员手动申请
    • 栈由系统自动匹配
  • 释放方式:

    • 堆由程序员手动释放
    • 栈由程序员自动释放
  • 生存周期:

    • 堆的生存周期由动态申请到程序员主动释放为止,不同函数之间可自由访问

      #include <stdlib.h>
      #include <stdio.h>
      
      int *func(void)
      {
          int *ptr =NULL;
          ptr =(int*)malloc(sizeof(int));
          if(ptr == NULL)
          {
              exit(1);
          }
          *ptr =520;
          return ptr;
      }
      int main ()
      {
          int *ptr=NULL;
          ptr = func();
          printf("%d\n",*ptr);
          free(ptr);
      }
      
    • 栈的生存周期由函数调用开始到函数返回时结束,函数之间的局部变量不能互相访问

  • 发展方向

    • 堆和其他区段一样,都是从第地址向高地址发展

    • 栈则相反,由高地址向低地址发展

  • 发展方向

    • 堆和其他区段一样,都是从第地址向高地址发展

    • 栈则相反,由高地址向低地址发展

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值