GCC .bss部分是否占用内存空间,条件是没有闪存的LMA和VMA的嵌入式系统都在RAM中?

时间:2017-03-05 01:52:44

标签: gcc memory linker-scripts

我在没有闪存的嵌入式系统上实现GCC链接器脚本,它只有RAM。

 MEMORY {
       RAM(rwx)  :ORIGIN = 0x04000000, LENGTH = 160K
       DLM(rwx)  :ORIGIN = 0x08000000, LENGTH = 32K
}

SECTIONS 
{
   .text :
       {
        *(.text*)
      }>RAM AT>RAM
     .data :
       {
        *(.data*)
      }>RAM AT>RAM
     .bss :
       {
        *(.bss*)
        *(COMMON)
      }>RAM AT>RAM

}

结果是.bss部分占用LMA视图上的RAM内存大小,这是不合理的。 .bss不应占用LMA视图中的RAM大小,并且当系统运行.bss区域init时会占用VMA内存大小

但我修改如下

 .bss :
   {
    *(.bss*)
    *(COMMON)
  }>DLM AT>RAM

结果是.bss部分在LMA视图上不占用大小,这是根据GCC ld预期的。

但是当LMA和VMA都在同一个内存(RAM)中时,为什么.bss部分会占用RAM内存大小?它没有意义。

0 个答案:

没有答案