首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

LD和NOLOAD部分:了解奇怪的LMA值

LD和NOLOAD部分是与链接器(linker)相关的概念。

链接器是编译过程中的最后一步,它将编译器生成的目标文件(object file)和库文件(library file)合并成最终的可执行文件(executable file)。在链接过程中,目标文件中的符号(symbol)会被解析为实际的地址,而LD和NOLOAD部分就是链接器中用来控制符号地址分配的一些特殊部分。

LD(Loadable Data)部分是指包含了可加载数据段(loadable data segment)的部分。可加载数据段是指在程序运行时需要被加载到内存中的数据,例如全局变量、静态变量等。LD部分的作用是将这些数据段分配到内存的合适位置,并为它们分配实际的地址。

NOLOAD部分是指包含了不需要被加载到内存中的数据段的部分。这些数据段通常是一些只读数据或者只在链接过程中使用的临时数据。NOLOAD部分的存在可以减少可执行文件的大小,提高程序的运行效率。

LMA(Load Memory Address)值是指链接器为目标文件中的符号分配的实际内存地址。在链接过程中,链接器会根据符号的类型和链接脚本(linker script)中的规则,为每个符号分配一个唯一的LMA值。LMA值决定了符号在内存中的位置,程序在运行时可以通过LMA值来访问和修改对应的数据。

总结:

  • LD部分是链接器中用来控制可加载数据段地址分配的部分,负责将数据段分配到内存中的合适位置。
  • NOLOAD部分是链接器中用来控制不需要加载到内存中的数据段的部分,可以减少可执行文件的大小。
  • LMA值是链接器为目标文件中的符号分配的实际内存地址,决定了符号在内存中的位置。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

嵌入式链接脚本(LINK SCRIPT)介绍

连接器有个默认内置连接脚本, 可用ld--verbose查看. 连接选项-r-N可以影响默认连接脚本(如何影响). -T选项用以指定自己链接脚本, 它将代替默认连接脚本。...目标文件每个section至少包含两个信息: 名字大小. 大部分section还包含与它相关联一块数据, 称为section contents(section内容)....通常VMALMA是相同....可这样来理解VMALMA, 假设: (1) .data section对应VMA地址是0x08050000, 该section内包含了3个32位全局变量, i、jk, 分别为1,2,3....可通过 man-S 1 ld查看ld联机帮助, 里面也包括了对这些命令介绍. 6. 对符号赋值 在目标文件内定义符号可以在链接脚本内被赋值. (注意C语言中赋值不同!)

2.1K40

lustre集群中一致校验

,link属性存储对象父目录对象fid信息;lma是存储对象自身fid信息; lov扩展属性记录当前object布局(位于那个ost上,那个文件上等信息) [root@CentOS-Lustre-Client...挂载后,进入ost挂载目录,获取这个分片信息,这个分片存储了该文件父目录fidlma这个扩展属性,lma包括了该文件fid信息 [root@CentOS-Lustre-OSS-1 /mnt/...// lustre中定义部分核心属性 #define XATTR_NAME_LOV "trusted.lov" #define XATTR_NAME_LMA...; int ld_reclen; }; // 对象父目录fid对象名称cname sname = lod_name_get(env, stripe_name, strlen(stripe_name...定义***************************/ // ost上每个object定义lma属性存储数据类型 struct lustre_mdt_attrs { __u32 lma_compat

72710

你真的了解 gif 吗?分析 gif 文件一些奇怪 gif 特性

,所以让我们讨论一下 gif 是如何组合在一起,顺便再谈谈它一些奇怪之处。...信不信由你,这是在文件格式中内置!(注 4) 字节 0x6-0xA 就是这部分信息,另外还加了点内容。字节 0x6 0x8 指的是长度宽度。...此外,grafx2 显然可以处理非常特定奇怪像素分辨率。不过我还没有亲自测试过。 回到全局颜色表 全局颜色表(GCT)显然是 gif 最无聊部分。这里真的没有什么值得谈论东西。...图像数据剩余部分 之后就没有什么可谈了。这张图像跳过了大多数其他 gif 特性,如本地颜色表动画,所以这张 gif 剩下部分只是数据终止符。...gif 规范中还有更多部分我没有讲到,如果你有兴趣了解更多关于 gif 信息,我建议你查看规范和我在文章顶部添加那些链接。 注释 1.

1.2K20

使用VisualGDB开发Keil MDK-ARM项目

mcu.mak文件指定了编译器工具(CC, CXX, LDAR)智能感知引擎使用公共标志。因为我们不想破坏智能感知,所以我们将在不同地方指定它们,而不是修改这个文件。...由Keil链接器生成ELF文件有一个基本问题。如果用GDB加载它,全局变量将是-1,而不是正常初始: ? 这是因为GNUKeil链接器之间差异。...GNU链接器为数据部分计算两个不同地址:加载它地址(VMA)存储其内容闪存地址(LMA)。然后,GDB将节内容放在LMA地址,启动代码将其复制到VMA。...Keil链接器设置了LMA = VMA,因此GDB没有将数据部分写入FLASH中,而是直接将其放入RAM中,在RAM中会被Keil statup代码覆盖,该代码希望它在FLASH中。...为了解决这个问题,我们首先需要找到节名。arm-eabi-objdump运行。exe -x (objdump工具是GCC工具链部分): ?

2.2K30

《程序员自我修养》第四章学习笔记

4.1.2 相似段合并:将相同性质段合并到一起。 a.o.text b.o.text 合并成 ab.text。其他段也类似。...1,“链接器为目标文件分配地址空间”:“地址空间”有两层含义,一是在输出可执行文件中空间。二是在装载后虚拟地址中虚拟地址空间。...2,链接器空间分配策略采用一种叫两步链接方法(分成两步)   (1)第一步 空间与地址分配:扫描所有输入目标文件,获取它们各个段长度、属性位置,将输入目标文件中符号表中所有的符号定义符号引用搜集起来...3,$ ld a.o b.o –e main –o ab     -e main 表示将main函数作为程序入口。ld链接器默认程序入口为 _start。...VMA:Virtual Memory Address 虚拟地址(我们主要关心这个Size) LMA:Load Memory Address 加载地址 正常情况下 LMA VMA应该是一样,但是在有些嵌入式系统中

17230

Android Color颜色转换,字符串转int。获取RGBA-了解Color几种转换取值

请注意,color颜色rgb拼接顺序并不是所有系统统一。例如有些系统中针对透明是放在了#号后面,而有些是放在了字符串末尾。 上面的取值方式有一个前提条件。...color类型该属性。.... #000000 字符串颜色转换int 我们经常碰见后台接口传递或者其他数据来源,给与我们就是#号开头一串颜色。而计算显示时候我们需要int。...由于Android颜色顺序是:ARGB。所以上面的例子是这样进行位移。但是还设有RGBA等情况。那么就要灵活调整位移了。明白原理过程后,我们也可以自己随意进行调整 5....了解这几种转换,大家针对颜色使用就能直观很多了。

1.6K20

静态链接-空间与地址分配

模块a.c引用到了b.c中swapshared。...“链接器为目标文件分配地址空间”这句话中“地址空间”其实有两个含义: 在输出可执行文件中空间; 装载后虚拟地址中虚拟地址空间。...空间与地址分配 扫描所有的输入目标文件,并且获得它们各个段长度、属性位置,并且将输入目标文件中符号表中所有符号定义符号引用收集起来,统一放到一个全局符号表。...我们使用ld链接器将“a.o”“b.o”链接起来: $ ld a.o b.o -e main -o ab -e main 表示将main函数作为程序入口,ld链接器默认入口为_start。...VMA表示虚拟地址,LMA表示加载地址,正常情况下两个都是一样,但是在有些嵌入式系统中,特别是程序放在ROM系统中时,LMAVMA是不相同。这里我们只要关注VMA即可。

1.9K60

makefile使用.lds链接脚本以及 @,^, $,< 解析

这个脚本里规定了两个段,firtstcecond 0x00000000   0x30000000    表示链接地址或运行地址,指程序在SRAM、SDRAM实际运行地址,也就是使PC等于这个地址。...这里就需要将多个目标文件.text、.data.bss等段链接在一起而链接脚本文件是告诉链接器从什么地址开始放置这些段 .text:代码段,存放程序执行代码一块内存 .data:读/写数据段,存放已初始全局变量或静态变量一块内存....rodata:只读数据段,存放只读数据段,比如全局const变量#define定义变量 .bss:存放未初始化全局变量或静态变量,这里变量存放只是用来预留位置,并不占用空间 常用命令: ENTRY...(SYMBOL);将SYMBOL设置成入口地址。...    .bss : { *(.bss) }                 //指定bss段,这里NOLOAD意思是这段不需装载,仅在执行域中才会有这段    _end = .;

70820

makefile使用.lds链接脚本以及 $@ ,$^, $,< 解析

这个脚本里规定了两个段,firtstcecond 0x00000000   0x30000000    表示链接地址或运行地址,指程序在SRAM、SDRAM实际运行地址,也就是使PC等于这个地址。...这里就需要将多个目标文件.text、.data.bss等段链接在一起而链接脚本文件是告诉链接器从什么地址开始放置这些段 .text:代码段,存放程序执行代码一块内存 .data:读/写数据段,存放已初始全局变量或静态变量一块内存....rodata:只读数据段,存放只读数据段,比如全局const变量#define定义变量 .bss:存放未初始化全局变量或静态变量,这里变量存放只是用来预留位置,并不占用空间 常用命令: ENTRY...(SYMBOL);将SYMBOL设置成入口地址。....bss : { *(.bss) } //指定bss段,这里NOLOAD意思是这段不需装载,仅在执行域中才会有这段 _end = .;

1.9K100

用GCC开发STM32入门二

.text常量表格数据等.rodata,.data对应初始化了全局变量,编译后将位于可执行文件中,由启动代码负责加载 到数据区中(在单片机中这部分数据会存于flash中,需要有启动代码把这部分内容拷贝到...sram中),.bss段是没有初始全局变量,由启动代码把这 部分内容全初始化为0;为了保证C程序执行,还需要设置好程序运行时堆栈区。..._etext为正文段结尾处地址,这之后flash空间是初始化数据,应该复制到sram中去, _data、_edata分别为数据段开始结尾处地址,这部分应该是sram地址。....; 这条语句把计数器“.”赋给了变量_etext;“.”现在就为.text尾部。 另,后面的.data、.bss、.stackarea部分可自行分析,原理一样。...调试仿真,linux下可以用openocdopenjtag,或者用GDB加jlinkGDBserver,windows下可以用GDBserver可视化GDB调试器insight。

1.7K20

使用Setuptear Down方法执行测试

使用Setuptear Down方法执行测试 示例:使用Setuptear Down方法执行测试 以通常方式执行新单元测试。 在一直在使用命名空间中打开终端。...例如,“/NoLoad/DEBUG”告诉管理器不要从目录加载任何测试,也就是说,使用当前在InterSystems IRIS中测试,并在调试模式下运行测试。这些限定符就是所谓可否定布尔。...相比之下,RunTest总是要求要执行测试包含在^UnitTestRoot子目录中,即使在使用NoLoad”时也是如此。...练习 练习1:MyPackage.TestMe包含一个名为CreateContact方法。此方法创建并返回Contact实例。它接受NameContactType作为参数。...因此,必须以正确方式初始化恢复数据库。

52920

快速上手使用makefile

有一次我问老师,为什么要傅里叶变换,学习它能用来做什么,老师先是很惊讶,然后耐心给所有同学都讲了讲,老师讲完也很欣慰,笑着说因为很少有学生去问这样问题。所以也只是讲课,没讲实际应用原理东西。...链接时,主要是链接函数全局变量,所以,我们可以使用这些中间目标文件(O文件或是OBJ文件)来链接我们应用程序。...main(); } uart_helloworld.c文件部分内容 ..... int main(void) { int i; Stm32_Clock_Init(2); //50M...bbs用是外部时钟25M while (1) { } } 链接脚本文件stm32f103VET6.ld ,定义代码段内存变量等存储位置。...但是对于代码文件很多情况就不适用了。 因此可以利用makefile自动推导隐式规则进一步精简。

1.3K20

机器学习中导数最优化方法(基础篇)

粗略来讲,在二次函数中,椭球面的形状受 hesse 矩阵条件数影响,长轴与短轴对应矩阵最小特征最大特征方向,其大小与特征平方根成反比,最大特征与最小特征相差越大,椭球面越扁,那么优化路径需要走很大弯路...牛顿法则是利用局部一阶二阶偏导信息,推测整个目标函数形状,进而可以求得出近似函数全局最小,然后将当前最小设定近似函数最小。...与 line search 方法不同,LMA 属于一种“信赖域法”(trust region),牛顿法实际上也可以看做一种信赖域法,即利用局部信息对函数进行建模近似,求取局部最小。...套用到我们之前 LMA 公式中,有: ?...与最速梯度下降不同,共轭梯度优点主要体现在选择搜索方向上。在了解共轭梯度法之前,我们首先简单了解一下共轭方向: ? 共轭方向马氏距离定义有类似之处,他们都考虑了全局数据分布。

1.5K130

从零开始学量化(四):用python写一个择时策略回测

看多了前面的铺垫,接下来写一写可以实操。本篇给出写择时策略回测详细步骤,并用代码展示全过程,代码用python写,数据代码后台回复“择时”获取,可以自己测试。...胜率 统计胜率要先统计交易次数,然后计算所以交易中盈利次数占比例 最大回撤率 回撤是策略从前期最高点到当前时点亏损,最大回撤是所有回撤中最大,反映是策略最大可能损失。...评价函数根据策略净值策略每笔交易情况计算策略上述各个指标。...transcation中记录每笔交易买卖时点价格 ? result_peryear中是策略逐年表现情况,也并不会比基准好多少 ?...综上,是一个完整策略回测评价过程,当然实际操作中还有许多需要细化地方,仅供参考,欢迎指正!

10.9K144

STM32高级开发——链接器与启动文件

工具链中链接器用法 在实际中,链接器执行程序实际上是arm-none-eabi-ld这个文件,但是我再实际编写过程中在遇到.c.cpp文件混合工程中,ld会在链接过程中报错。...这里就比较高深了,在51单片机中我们知道最后在生成代码后51单片机内存中会有如 code、xdata、data区段,来讲代码中执行部分、变量部分等分区块放置,而.ld就是一种链接器使用规则性文件,他告诉链接器单片机系统...对于.ld文件它是有一套自己语法及设置参数规则,大家可以不具体作了解,但求看懂其中一部分信息。...其中ld文件中一些变量如堆栈大小等我们会在讲解启动文件过程中来解析,因为启动文件ld文件中东西息息相关。...总结 说了这么多,这也是我们在这个系列中比较难以理解部分,因为涉及到了GNU C特性计算机编译链接最基础部分,还有Cortex-M3内核工作方式,但是请大家仔细去理解学习,如果看了这篇文章还不懂那就多查查相关资料

76530
领券