Когда я проверяю карту памяти после компиляции, я вижу, что символы в разделе DATA или BSS не упорядочены оптимизированным образом с учетом их размера и ограничения доступа к процессору.
Например, я получаю что-то вроде:
address size name
0x1000 1 var_a
0x1004 4 var_b
0x1008 1 var_c
0x100a 2 var_d
0x100c 4 var_e
0x1010 1 var_f
0x1014 4 var_g
0x1018 0 end
вместо получения:
0x1000 4 var_b
0x1004 4 var_e
0x1008 4 var_g
0x100c 2 var_d
0x100e 1 var_a
0x100f 1 var_c
0x1010 1 var_f
0x1011 0 end
Однако я вижу, что все символы перепутаны и не связаны с их порядком в источнике или во время компиляции.
Я использую параметры -Os
-flto
-flto
-fuse-linker-plugin
-flto-report
-flto-compression-level=9
. GCC для ARM - это arm-none-eabi-gcc
v4.8.3 от https://launchpad.net/gcc-arm-embedded а ld
- это v2.23.2.
Есть ли какая-либо соответствующая причина, по которой ld
не выполняет эту оптимизацию? Как я могу изменить порядок символов, чтобы улучшить использование памяти?