我有一个uint8_t [95][5]包含 7x5 位图各种字符的大数组(每个字节中的 1 位未使用)。我只使用了这 95 个字符中的几个,但完整的静态数组无论如何都存储在程序内存中。
我正在使用 AVR,它的程序内存有限,因此每个字节都很重要!于是我尝试将数组重写为多个模板专用类(见下文),但并没有解决问题。当我导入包含所有定义的头文件时,所有字符都成为我的可执行文件的一部分,无论它们是否在程序中使用。
例如,以下代码
#include <stdint.h>
template <char C> struct BitMap { static uint8_t cols[5]; };
template <> uint8_t BitMap<'3'>::cols[] = {0xFF,0xFC,0xAB};
int main() { return 0; }
g++ -Os用生成编译
main:
xor eax, eax
ret
BitMap<(char)51>::cols:
.byte -1
.byte -4
.byte -85
.zero 2
由于程序中没有使用这个静态数组,有没有办法指示编译器/链接器摆脱它?或者,我可以做任何代码技巧,以便只有在我使用它时才实例化数组?