位置无关码的含义

       今天学习的过程中又遇到了“位置无关码”这个概念,竟然一时间想不起来什么意思了,所以证明之前并没有完全搞懂啊!!!再次百度了一下别人的文章,总算又加深了一遍印象。

        这篇文章讲的通俗易懂,可以借鉴一下:代码重定位和位置无关码。其中讲到位置无关码的含义就是,在我们写的裸板程序时,链接地址的起始地址是从0x30000000,比如下面所示:

SECTIONS
{
    . = 0x30000000;

    . = ALIGN(4);
    .text      :
    {
      *(.text)
    }

    . = ALIGN(4);
    .rodata : { *(.rodata) }

    . = ALIGN(4);
    .data : { *(.data) }

    . = ALIGN(4);
    __bss_start = .;
    .bss : { *(.bss) *(.COMMON) }
    _end = .;
}

       但是假如我们的代码在重定位之前, 会被板子拷贝到片内内存的0地址开始运行,这时候链接地址0x30000000和运行地址0就不相等了,所以运行的代码必须是位置无关的才行,比如不能有全局变量等。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值