关闭

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

标签: c语言总结c存储
951人阅读 评论(0) 收藏 举报
分类:

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变量和字符串 有初值的全局变量 没有初值的全局变量
存储位置 ROM ROM ROM,但会加载到RAM RAM

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:254049次
    • 积分:4042
    • 等级:
    • 排名:第7735名
    • 原创:153篇
    • 转载:21篇
    • 译文:2篇
    • 评论:186条