手机端C程序编译运行的简单分析

记得我们以前写汇编程序的时候总是要把程序分成代码段、数据段、堆栈段,现在回想,应该是为了提高汇编器的汇编效率,提前分配好在ROM各段的存储。

类似的我们可以判断在C程序编译之后生成的二进制文件中,已经包含了各个段的信息,方便我们在程序运行的时候获取。

这个二进制文件即我们通常意义上讲的ROM,说得明白些其实是将程序代码烧录到flash memory中,因为最原始的存储代码的介质是ROM,所以习惯将代码的二进制文件叫做ROM文件。

 运行期间C程序可以看做由下列部分组成:

    1)代码段——CPU执行的机器指令部分。

    2)数据段——在程序中所有的静态变量(全局变量从某种意义上说也是静态变量,作用范围为全局),存放在这里。

    3)栈——自动变量以及每次函数调用时所需要保存的信息(返回地址;环境信息)。

    4)堆——动态存储部分。

    5)只读常量区——不允许修改的数据存放区域(如char*p = "helloworld"、const修饰的变量)。

代码段的载入并不是一次性的,OS有它自己的设计,而我们讨论内存占用的时候很大一部分是在讨论的是数据段和堆栈段的存储问题。

以上分析,如有异议,欢迎讨论。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值