Linker 在gnu链接器脚本中使用ALIGN命令
为什么在链接器脚本的每个输出部分的开始和结束处使用ALIGN(4)语句?? 它是否在每个部分之间创建了某种间距 代码 免责声明:我不是编译器或链接器开发人员,这只是我的印象和经验 32位处理器的内存访问在对齐时要快得多,其中一些处理器甚至不能访问未对齐的宽字。手臂不是那样的Linker 在gnu链接器脚本中使用ALIGN命令,linker,arm,microcontroller,linker-scripts,nxp-microcontroller,Linker,Arm,Microcontroller,Linker Scripts,Nxp Microcontroller,为什么在链接器脚本的每个输出部分的开始和结束处使用ALIGN(4)语句?? 它是否在每个部分之间创建了某种间距 代码 免责声明:我不是编译器或链接器开发人员,这只是我的印象和经验 32位处理器的内存访问在对齐时要快得多,其中一些处理器甚至不能访问未对齐的宽字。手臂不是那样的 但是,编译器在布局代码和数据时假定这些部分是正确对齐的,这些代码和数据最终将被链接起来。因此,链接器脚本必须满足这一假设。是的,它用于对齐边界。把一个放在向量表前面是一个潜在的错误,但无论谁这样做都可能是一种习惯。某些事情必
但是,编译器在布局代码和数据时假定这些部分是正确对齐的,这些代码和数据最终将被链接起来。因此,链接器脚本必须满足这一假设。是的,它用于对齐边界。把一个放在向量表前面是一个潜在的错误,但无论谁这样做都可能是一种习惯。某些事情必须保持一致,在其他情况下,这是一个性能问题
SECTIONS
{
/* The startup code goes first into internal flash */
.interrupts :
{
__VECTOR_TABLE = .;
. = ALIGN(4);
KEEP(*(.isr_vector)) /* Startup code */
. = ALIGN(4);
} > m_interrupts
.flash_config :
{
. = ALIGN(4);
KEEP(*(.FlashConfig)) /* Flash Configuration Field (FCF) */
. = ALIGN(4);
} > m_flash_config
/* The program code and other data goes into internal flash */
.text :
{
. = ALIGN(4);
*(.text) /* .text sections (code) */
*(.text*) /* .text* sections (code) */
*(.rodata) /* .rodata sections (constants, strings, etc.) */
*(.rodata*) /* .rodata* sections (constants, strings, etc.) */
*(.glue_7) /* glue arm to thumb code */
*(.glue_7t) /* glue thumb to arm code */
*(.eh_frame)
KEEP (*(.init))
KEEP (*(.fini))
. = ALIGN(4);
} > m_text