Почему выходные данные раздела .bss показывают большее значение по сравнению с выходными данными карты памяти? - PullRequest
0 голосов
/ 16 июня 2020

Я компилирую чужой код, используя G CC, и на выходе из G CC отображается большой раздел .bss:

text  data    bss    dec
9468  1080  10892  21440

Я запускаю следующую команду, чтобы сгенерировать информацию, относящуюся к каждому раздел, чтобы я мог попытаться выяснить, что занимает так много места в разделе .bss:

objdump -x output.elf > output.dmp

Вот результат работы разделов:

 Sections:
 Idx Name          Size      VMA       LMA       File off  Algn
   0 .mstack       00001000  20000000  20000000  00030000  2**0
                   ALLOC
   1 .pstack       00001000  20001000  20001000  00030000  2**0
                   ALLOC
   2 .nocache      00000000  30040000  30040000  0002042c  2**2
                   CONTENTS
   3 .eth          00000000  30040000  30040000  0002042c  2**2
                   CONTENTS
   4 .vectors      000002a0  08000000  08000000  00010000  2**4
                   CONTENTS, ALLOC, LOAD, READONLY, CODE
   5 .xtors        0000000c  080002a0  080002a0  000102a0  2**2
                   CONTENTS, ALLOC, LOAD, DATA
   6 .text         00002054  080002b0  080002b0  000102b0  2**4
                   CONTENTS, ALLOC, LOAD, READONLY, CODE
   7 .init         00000004  08002304  08002304  00012304  2**2
                   CONTENTS, ALLOC, LOAD, READONLY, CODE
   8 .fini         00000004  08002308  08002308  00012308  2**2
                   CONTENTS, ALLOC, LOAD, READONLY, CODE
   9 .rodata       00000200  0800230c  0800230c  0001230c  2**2
                   CONTENTS, ALLOC, LOAD, READONLY, DATA
  10 .data         0000042c  24000000  0800250c  00020000  2**3
                   CONTENTS, ALLOC, LOAD, DATA
  11 .bss          00000a8c  24000430  08002938  00020430  2**3
                   ALLOC
  12 .ram0_init    00000000  24000ebc  24000ebc  0002042c  2**2
                   CONTENTS
  13 .ram0         00000000  24000ebc  24000ebc  0002042c  2**2
                   CONTENTS
  14 .ram1_init    00000000  30000000  30000000  0002042c  2**2
                   CONTENTS
  15 .ram1         00000000  30000000  30000000  0002042c  2**2
                   CONTENTS
  16 .ram2_init    00000000  30000000  30000000  0002042c  2**2
                   CONTENTS
  17 .ram2         00000000  30000000  30000000  0002042c  2**2
                   CONTENTS
  18 .ram3_init    00000000  30040000  30040000  0002042c  2**2
                   CONTENTS
  19 .ram3         00000000  30040000  30040000  0002042c  2**2
                   CONTENTS
  20 .ram4_init    00000000  38000000  38000000  0002042c  2**2
                   CONTENTS
  21 .ram4         00000000  38000000  38000000  0002042c  2**2
                   CONTENTS
  22 .ram5_init    00000000  20002000  20002000  0002042c  2**2
                   CONTENTS
  23 .ram5         00000000  20002000  20002000  0002042c  2**2
                   CONTENTS
  24 .ram6_init    00000000  00000000  00000000  0002042c  2**2
                   CONTENTS
  25 .ram6         00000000  00000000  00000000  0002042c  2**2
                   CONTENTS
  26 .ram7_init    00000000  38800000  38800000  0002042c  2**2
                   CONTENTS
  27 .ram7         00000000  38800000  38800000  0002042c  2**2
                   CONTENTS
  28 .ARM.attributes 00000030  00000000  00000000  0002042c  2**0
                   CONTENTS, READONLY
  29 .comment      0000004c  00000000  00000000  0002045c  2**0
                   CONTENTS, READONLY
  30 .debug_info   0001bdb6  00000000  00000000  000204a8  2**0
                   CONTENTS, READONLY, DEBUGGING, OCTETS
  31 .debug_abbrev 000043c3  00000000  00000000  0003c25e  2**0
                   CONTENTS, READONLY, DEBUGGING, OCTETS
  32 .debug_aranges 00000ae8  00000000  00000000  00040628  2**3
                   CONTENTS, READONLY, DEBUGGING, OCTETS
  33 .debug_ranges 00000918  00000000  00000000  00041110  2**0
                   CONTENTS, READONLY, DEBUGGING, OCTETS
  34 .debug_line   00007b18  00000000  00000000  00041a28  2**0
                   CONTENTS, READONLY, DEBUGGING, OCTETS
  35 .debug_str    000031ff  00000000  00000000  00049540  2**0
                   CONTENTS, READONLY, DEBUGGING, OCTETS
  36 .debug_frame  000027e8  00000000  00000000  0004c740  2**2
                   CONTENTS, READONLY, DEBUGGING, OCTETS

Как вы можете см. раздел .bss занимает всего 2700 байт. Не мог бы кто-нибудь объяснить, как я могу отследить, откуда берутся лишние байты? Спасибо.

Также не уверен, актуально ли это, но я использую процессор ARM Cortex-M7.

1 Ответ

0 голосов
/ 16 июня 2020

Забыть. Я выяснил, откуда берутся лишние байты.

Разделам .mstack и .pstack выделено по 4 Кбайта, и они помещаются в ОЗУ. Когда я беру 8 Кбайт (.mstack + .pstack) и добавляю размер раздела .bss, я получаю выходное значение G CC 10892.

...