arm链接脚本学习

SECTIONS {
    . = 0x00;     //表示当前地址为零,从零地址开始排放
    .text          :   { *(.text) }  
    .rodata ALIGN(4) : {*(.rodata)} 
    .data ALIGN(4) : { *(.data) }
    .bss ALIGN(4)  : { *(.bss)  *(COMMON) }
}

. = 0x00表示当前地址为零,从零地址开始排放。首先是代码段,接着是只读数据段,然后是data段和bss段。这里的*表示所有文件的代码段数据段等。

1、 bss段用来存放 没有被初始化 和 已经被初始化为0 的全局变量。静态变量

2、已被初始化为非零的全局变量(.data段)

3、常量数据(.rodata段)

rodata用来存放常量数据。 ro: read only
字符串会被编译器自动放在rodata中,加 const 关键字的常量数据会被放在 rodata 中
在有的嵌入式系统中, rodata放在 ROM(或 NOR Flash)里,运行时直接读取,不须加载到RAM内存中。
所以,在嵌入式开发中,常将已知的常量系数,表格数据等造表加以 const 关键字。存在ROM中,避免占用RAM空间

4.代码(.text段)
  text段存放代码(如:函数)和部分整数常量(应该指的是一些立即数),这个段是可执行的。

5.栈(stack)
  1)stack 存放函数的局部变量和函数参数

  2)被调用函数的参数和返回值 被存储到当前程序的栈区,之后被调用函数再为自身的自动变量和临时变量在栈区上分配空间

  3)函数返回时,栈区的数据会被释放掉,先入后出(FILO)的顺序。

6.堆(heap)
  heap用来动态分配内存,由程序自身决定开辟和释放。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值