【Linux C】变量何时存放在BSS段?

Linux进程地址空间布局

        一个Liunx应用程序进程在内存中有不同的分段(Segment),而进程地址空间布局中,从物理上,数据(user data, sys data)和指令,都是“数据”,但是从逻辑上来讲,是有区别的,属性不一样。有些数据是指令,只读,不可写,有些数据可写,有些数据只可读。

【题外话】关于CPU如何区分内存中数据到底是“指令”还是“数据”,就需要一些基础汇编知识了。举例来说,CPU中有几个寄存器专门用来指向“数据”或“指令”,CPU将会根据该寄存器指向的内存地址来确定内存中的数据到底需要被解释为“指令”还是“数据”。例如,DS(Data Segment)寄存器指向的内存地址被CPU认为是“数据”,而CS(Code Segment)寄存器和IP(Instruction Pointer)寄存器则共同决定了CPU将要执行的”指令“(其本质上也是数据,但是这些数据可以被CPU所理解,是CPU可以执行的动作)。

从逻辑层面(操作系统)把数据分成不同的段(不同的区域)来存储:

 这里我们不做过多讨论,因为网上的资料已经非常全面,具体可以参考如下文章,都是非常不错的总结:

代码段(codesegment/textsegment)、数据段(datasegment)、bss段(bsssegment)、rodata段、栈(st

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值