C语言中程序与数据的存储位置

1.引言

在单片机和嵌入式中,代码的程序和数据会存储在不同的地方,下面进行总结。

一般程序可以分为程序段和数据段,如果再分细一点,还可以分为text段rodata段data段bss段



2.text段

text段就是程序部分,一般情况下存储在ROM中。



3.rodata段

rodata段,rodata全称是Read-oniy-data。即程序中定义为const的变量,以及诸如「"Hello World!"」的字符串

一般情况下存储在ROM中。

l例如:

const int A = 4;
const char B[] = "This is a bool";
const int A[10] = {11,22,33,44,55,66,77,88,99,0};

void fun(void)
{
        char *string = "rodata String";//属于rodata段
}


4.data段

有初值的全局变量都属于这个段。

在链接时期,这些初值必须加入可执行文件中;在执行时期,因为这些变量的值可能会改变,所以不能在ROM地址中寻址,即系统在开始使用这些变量之前,必须将其初值加载到RAM中。

所以,data段会被加入ROM中,但要到RAM的地址寻址。

例如:

int a = 10;
int b[10] = {11,22,33,44,55,66,77,88,99,0};


5.bss段

bas的全称是Block Started by Symbol。bss段即是没有初值的全局变量

因为没有初值,所以不需要加入程序中,只要在链接的时候在RAM寻址即可。

例如:

int a;
char b[10];
int buffer[100*1024];


6.总结

段区名text段rodata段data段bss段
包含内容程序部分const变量和字符串有初值的全局变量没有初值的全局变量
存储位置ROMROMROM,但会加载到RAMRAM

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值