• C程序的存储内存空间


    C程序由以下几部分组成:正文段 初始化数据段  非初始化数据段 栈 堆

    正文段: 这是由cpu执行段机器指令部分,正文段是可共享的,正文段通常是只读的

    初始化数据段: 通常称为数据段,它包含了程序中需要明确赋初值的变量,例如,C程序中出现在任何函数之外的声明:int maxcount = 99; 此变量带有初值存放在初始化数据段中

    非初始化数据段:通常称为bss段,在程序开始执行前,内核将此段中段数据初始化为0或空指针。出现在任何函数外段C声明long sum[1000];此变量存放在非初始化数据段中

    栈: 自动变量以及每次函数调用时所需要保存的信息都存放在此段中。每次调用函数时,其返回值地址以及调用者的环境信息,都存放在栈中,最近被调用的函数在栈上为其自动和临时变量分配内存空间。通过以这种方式使用栈,可以递归调用C函数。递归函数每次调用自身段时候,就使用一个新段栈帧,因此一个函数调用实例中的变量不会影响另一个函数调用实例中的变量。

    堆:通常在堆中进行动态内存分配。堆位于非初始化数据段和栈之间。

    栈是从高地址向低地址方向增长,堆是从低地址向高地址方向增长。

    堆顶和栈低之间未用的虚地址空间很大。

     未初始化数据段并不存放在磁盘的程序文件中,内核在开始运行程序之前把它们都设置为0

  • 相关阅读:
    linux vim编辑
    jQuery Ajax 操作函数
    导出excel表功能
    jquery 分页控件功能
    数据绑定后细节处理
    删除数据库日志文件的操作语句
    SqlHelper.cs
    c#中$.ajax的使用
    SpringBoot 获取微信小程序openid
    Arduino IDE 开发 ESP-01S/ESP-01物联网实战检测温度湿度上传MQTT服务器
  • 原文地址:https://www.cnblogs.com/qianye/p/2795241.html
Copyright © 2020-2023  润新知