C程序的存储空间和布局

C程序由正文段、初始化数据段、未初始化数据段(bss段)、栈和堆组成。正文段包含机器指令,通常是只读且可共享。数据段存储已赋初值的变量,bss段在程序开始时由内核初始化为0或空指针。栈用于自动变量和函数调用信息,动态分配存储空间。堆则用于程序运行时的动态内存分配,静态存储方式包括全局变量和静态变量的分配。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

知道程序语言的构成,才可以去解析语言(编译器的工作);

 

 

C程序(C语言编写的程序)的组成:

  • 正文段(文本段)

     cpu执行的机器指令部分;

 

     通常,正文段可共享---频繁执行的程序在存储器中也只需要一个副本

     通常,正文段是只读的---防止程序意外修改其指令

 

  • 初始化数据段(数据段)

       包含程序中需明确赋初值的变量;

 

  • 未初始化的数据段(bss段,block started by symbol---由符号开始的块

      程序开始执行前,内核将此段中的数据初始化为0或空指针

 

  • 栈(stack)

     自动变量(过程结束自动释放的变量,一个函数就是一个过程)以及每次函数调用时所需保存的信息都存放在此段中;

     每次函数调用时,其返回地址以及调用者的环境信息(某些机器寄存器的值)都保存在栈中;

     最近被调用的函数在栈上为其自动和临时变量分配存储空间(栈动态分配---编译器的工作);

 

  • 堆(heap)

        通常,在堆中进行动态存储分配;

       堆位于未初始化数据段与栈之间(历史形成的惯例);

 

 

C程序典型存储空间的安排

 

 

动态存储方式

在程序运行期间根据需要进行动态分配存储空间的方式;

动态存储变量是在程序执行过程中,使用它时才分配存储单元,使用完立即释放;

 

静态存储方式

在程序编译时分配固定的存储空间的方式;

变量(全局变量、静态变量)定义时就分顶存储单元并一直保持不变,知道程序运行结束;

 

动态内存分配(堆):发生自强程序调入和执行时,动态地分配或者回收存储空间的分配内存的方法;

 

静态内存分配:发生在程序编译和链接的时,预先分配存储空间(栈可以是静态分配如全局变量,也可以是动态分配;,栈动态分配是由编译器进行释放);

 

参考书籍:Unix环境高级编程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值