新年的第一篇博文,先祝我工作顺利,万事如意!祝福大家的话就不赘述了。
在开始操作系统的内存管理相关内容前,首先来关注链接脚本,因为动态内存即堆区的地址是在链接脚本中分配的,知道了堆的起始地址和长度才能进行内存的分配和管理。
1. 链接脚本的作用是什么?



链接的作用就是把编译生成的多个目标文件(.o)合并起来,生成最后的可执行文件(.elf)。如上图中间的就是.o目标文件,最右的则是链接生成的.elf文件。除此之外,链接脚本还关注一个问题,就是生成的各个段被加载在内存的什么位置。
举个例子很容易就明白,下面是一个RISC-V代码的链接脚本:
OUTPUT_ARCH( "riscv" ) /* 代码采用的是RISC-V架构*/
ENTRY( _start ) /*代码入口符号是_start,就是汇编启动函数的符号*/
MEMORY
{
/* 定义了一段起始地址为0x80000000,长度为128MB的内存区域,取名叫ram*/
ram (wxa!ri) : ORIGIN = 0x80000000, LENGTH = 128M
}
SECTIONS
{
/* 所有输入文件中的.text段、.text.*段都合在一起,组成输出elf文件中的.text段;
* 此外,定义了两个符号_text_start和_text_end ,注意符号'.'代表的是当前地址;
* 生成的.text段被放在了ram这个内存区域中。
*/

最低0.47元/天 解锁文章
178

被折叠的 条评论
为什么被折叠?



