文件格式名: .lds
SECTIONS{ //精确控制了输入段在输出文件中的顺序、位置和所在段 .= 0x87800000; //. 为地址符号,该处申明链接的起始地址 .text: //.text代表从上述地址(代码段的起始地址)开始填入代码段信息 { start.o //其中一部分代码段 *(.text) //表示剩余所有代码段 } .rodata ALIGN(4) : {*(.rodata)} //常量段信息,ALIGN(4)代表4个字节对齐 .data ALIGN(4) : {*(.data)} //初始化的变量(初始化不为0)信息 __bss_start = .; //此处的.代表bss段的起始地址,将其赋值给.bss .bss ALIGN(4) : {*(.bss)} __bss_end = .; //bss段结束地址,效果同上 }
详细介绍见:https://blog.csdn.net/dongdong0071/article/details/86498209
**
1. text段.text --代码段,存放程序执行代码的区域。
**
**
2. data段初始化(初始化不为0)的数据段(变量),存放程序中已初始化的全局变量。
**
**
3. bss段未初始化或初始化为0的数据段,分为两种:bss、COMMON
bss -> 未初始化或初始化为0的静态变量,以及初始化为0的全局变量;
COMMON -> 未初始化的全局变量。
故上述代码可写为:
__bss_start = .; .bss ALIGN(4) : {*(.bss) *(COMMON)} __bss_end = .;
**
**
4. rodata段只读数据段,存放C中字符串和常量(一般为#define定义的常量,像立即数这种常量就不在rodata中)
**
**
5. heap堆存放进程运行中被动态分配的内存段,大小并不固定,可用malloc、free申请释放内存
**
**
6. stack栈存放程序临时创建的局部变量及函数调用压栈入栈(注:stack申明的局部变量存放在数据段)。
**
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)