查看: 1558|回复: 0

[资料] TMS320C6000 C/C++运行时环境

[复制链接]

该用户从未签到

发表于 2021-1-22 17:19:47 | 显示全部楼层 |阅读模式
分享到:
一.存储器模型
   C6000编译器把整个存储区当作单个线性存储块,并将其分配为代码区和数据区,一个C程序产生的代码和数据被放在各自连续的存储空间中,编译器假定存储器的32位地址空间都是可用的,但需要注意的是,连接器才是最终决定存储器映像(定义存储器映像并将代码和数据分配到目标存储器的是连接器,)编译器不对可用的存储器作任何假设,也不关心哪个地址不能被代码或者数据占用,以用哪些地址是保留给I/O设备或控制寄存器。


    编译器生成的可重定位的代码块和数据块称为段,系统设置不同,段分配到存储器的方式也不同,c6000编译器产生如下几个段:


已初始化段,包含数据和执行代码


(1).cinit段:包含变量初始值和常量值.


  (2).const段:包括字符串文字,浮点常量和在程序中被声明为const的数据(如果常量没有同时被声明为volatile


  (3).switch段:包含switch语句的跳转表


  (4).text段:默认的包含所有的可执行的代码


未初始化段:存储器中的保留空间,程序在运行时用它来创建和存储变量。C/C++编译器生成的未初始化段:


  (1).bss: 为全局变量和静态变量保留,如果为连接器设置了-c选项,则在程序开始时,C引导程序(c_int00)会将.cinit段的数据复制到bss段中,编译器会定义全局符号$bss,并指定其为.bss段的起始地址.


(2).far段:为声明为far的全局变量和静态变量保留


(3).stack段:系统栈,这个存储区用于传递参数和为局部变量分配存储空间.


(4).system段:为动态存储空间分配保留的存储区,提请动态空间分配要求的函数有:malloc calloc,和realloc等等,如果程序中没有用这些函数,编译器不生成此段
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /4 下一条



手机版|小黑屋|与非网

GMT+8, 2024-11-24 05:53 , Processed in 0.107172 second(s), 15 queries , MemCache On.

ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

苏公网安备 32059002001037号

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.