Link.ld 链接脚本内存解析

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

unsigned int  bss_test_array[1024 * 1024];

unsigned int  bss_test_char = 0;

unsigned int  data_test_array[10] = {0,1,2,3,4,5,6,7,8,9};

unsigned int  data_test_char = 0xFF;

const unsigned int rodata_test_array[5] = {0,1,2,3,4};

 

int main(int argc,char *argv[])

{

  int bss_size = sizeof(bss_test_array);

  printf("I am Chinese!");

  return 0;

}

 

1.未初始化的全局变量(.bss段)

bss段用来存放 没有被初始化已经被初始化为0 的全局变量。如下例代码:

 

unsigned int  bss_test_array[1024*1024];

unsigned int  bss_test_char = 0;

 

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

unsigned int  data_test_array[10] = {0,1,2,3,4,5,6,7,8,9};

unsigned int  data_test_char = 0xFF;

 

3.常量数据(.rodata段)

 1)rodata用来存放常量数据。 ro: read only;

 2)字符串会被编译器自动放在rodata中,加 const 关键字的常量数据会被放在 rodata 中;如:

const unsigned int rodata_test_array[5] = {0,1,2,3,4};

printf(“I an Chinese”);

4.代码(.text段)

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

5.栈(stack)

  1)stack 存放函数的局部变量和函数参数

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

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

6.堆(heap)

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

7.smll data初始化段

.sdata是指smll data初始化段(小于多少可以算small data,可以在codewarrior中设置)用于存放“近”数据,即使用短指针(near)寻址的数据。有利于小的对象组合到单个可以直接寻址的区域;

8.small data未初始化段
.sbss 是指small data未初始化段。

 

 

系统设置栈指针,以MIPS为列,在bootup.S中调用

La sp,_stack_top_addr;  $sp堆栈指针(Stack Pointer)

La gp,_gp_top_addr;   $gp(全局指针(Global Pointer)

 

Mips 寄存器参考:https://blog.csdn.net/gujing001/article/details/8476685

mips指令简单入门:

https://blog.csdn.net/ben_chong/article/details/51794392

Link.ld 脚本详解

https://www.cnblogs.com/li-hao/p/4107964.html

http://blog.chinaunix.net/uid-27197466-id-4461055.html

https://segmentfault.com/a/1190000007103522?utm_source=tuicool&utm_medium=referral

https://blog.csdn.net/imdxt1986/article/details/7975911

https://blog.csdn.net/ywcpig/article/details/52303745

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值