Linker 在gnu链接器脚本中使用ALIGN命令

Linker 在gnu链接器脚本中使用ALIGN命令,linker,arm,microcontroller,linker-scripts,nxp-microcontroller,Linker,Arm,Microcontroller,Linker Scripts,Nxp Microcontroller,为什么在链接器脚本的每个输出部分的开始和结束处使用ALIGN(4)语句?? 它是否在每个部分之间创建了某种间距 代码 免责声明:我不是编译器或链接器开发人员,这只是我的印象和经验 32位处理器的内存访问在对齐时要快得多,其中一些处理器甚至不能访问未对齐的宽字。手臂不是那样的 但是,编译器在布局代码和数据时假定这些部分是正确对齐的,这些代码和数据最终将被链接起来。因此,链接器脚本必须满足这一假设。是的,它用于对齐边界。把一个放在向量表前面是一个潜在的错误,但无论谁这样做都可能是一种习惯。某些事情必

为什么在链接器脚本的每个输出部分的开始和结束处使用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