linker 文件中的keep

本文解释了在链接过程中如何使用keep指令来标记那些不应该被垃圾回收的部分。当使用--gc-sections选项启用输入段落的垃圾回收时,可以通过将输入部分用KEEP()括起来来避免其被清除。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

查看linker文件的时候发现不理解 keep,查询网络后有了理解。keep相当于告诉编译器,这部分不要被垃圾回收。

There's a --gc-sections option that enables garbage collection of unused input sections. The default behavior (of not performing 

this garbage collection) can be restored by specifying --no-gc-sections on the command line. 

When link-time garbage collection is in use (--gc-sections), marking sections that should not be eliminated is often useful. This is 

accomplished by surrounding an input section’s wildcard entry with KEEP(), as in KEEP(*(.init)) or KEEP(SORT_BY_NAME(*)

(.ctors)).

S32 Design Studio (简称 S32DS) 是 NXP 推出的一个集成开发环境(IDE),专门用于基于 ARM 架构的微控制器的设计和开发工作。Linker 文件(链接文件)是编译过程中非常重要的一部分,它负责指定程序代码、数据和其他资源在最终生成的目标文件中的存储位置。 对于 S32K 系列器件来说,linker 文件的作用尤为关键,因为它不仅影响着应用程序能否正确加载运行,还直接决定了系统性能优化的程度。下面是一些关于 S32DS 中 linker 文件的重要知识点: ### Linker 文件的主要功能 1. **分配内存空间**: 定义各个段(如 `.text` 为只读指令段,`.data` 为初始化的数据变量,.bss 未初始化全局静态变量等)占用的具体地址范围及其大小。 2. **入口点设置**: 明确告诉启动代码从哪里开始执行第一条机器语言指令。 3. **库函数引用管理**: 决定外部库函数是如何映射到项目当中去使用。 ### 创建和编辑 Linker 文件的方式 - **自动生成模板**: - 在新建工程时选择对应处理器型号后,S32DS IDE 会自动为你创建默认的 link.ld 或者其他类型的 linker 脚本作为初始框架。 - **手动编写修改**: - 如果需要定制化一些特殊需求,则可以参考官方提供的例子学习如何调整现有参数或者添加新的规则。 例如,在一个简单的 S32DS 工程里,默认生成的 `s32k1xx_flash.ldf` 链接器描述文件片段可能是这样的: ```ld MEMORY { FLASH (rx): ORIGIN = 0x08000000, LENGTH = 512K /* Flash memory */ RAM (rwx) : ORIGIN = 0x20000000 , LENGTH = 64K /* SRAM */ } SECTIONS { .isr_vector : { KEEP(*(.isr_vector)) /* Interrupt vector table */ } >FLASH .text : { *(.text*) /* Program code and read-only data sections */ }>FLASH ALIGN(4) _sidata = LOADADDR (.data); .data : { PROVIDE (__preinit_array_start = .); PROVIDE(__preinit_array_end = .); PROVIDE (__init_array_start = .); PROVIDE (__init_array_end = .); PROVIDE (_edata = .); /* End of initialized variables */ __data_load__ = LOADADDR (.data); *(.data*) }>RAM AT> FLASH } ``` 以上只是一个简化示例,实际应用中可以根据具体的硬件特性和软件架构做出更多针对性设计。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值