有限内存平台上的数组指针的C++数组(arduino)

cla*_*amp 10 c++ embedded arduino

对于字母表中的每个字母,我有一个如下所示的int数组:

int const  A[64] ={ 
    0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,
    0,1,1,1,0,0,0,0,
    0,1,0,1,0,0,0,0,
    0,1,1,1,0,0,0,0,
    0,1,0,1,0,0,0,0,
    0,1,0,1,0,0,0,0,
    0,0,0,0,0,0,0,0
};
Run Code Online (Sandbox Code Playgroud)

然后我创建另一个数组,指向这些.

int const * text[] = { A, B, C };
Run Code Online (Sandbox Code Playgroud)

这工作正常,直到该文本数组达到一定数量的不同条目.

例如,这工作:

int const * text[] = { A, A, A, A, A, A, A, A }; // could even go on much longer
Run Code Online (Sandbox Code Playgroud)

但这崩溃了:

int const * text[] = { A, B, C, D }; // it seems the number of different entries matters
Run Code Online (Sandbox Code Playgroud)

这是为什么?我认为,如果它是指针,那么它指向什么并不重要它总是具有恒定的大小?

请注意,这是在arduino平台上运行的,它的内存非常有限.

Bre*_*ale 2

我怀疑正在优化对具有相同元素的数组的查找;如果int const *text[];在头文件中声明并在单独的目标文件中编译(定义),您可能会遇到相同的问题。链接器正在尽其所能,但所有数据可能与堆/堆栈空间重叠。

至少对于 avr-libc(使用 avr-gcc、avr-binutils),有宏或变量属性可以将此类常量数据放置在更大的只读程序空间(闪存 ROM)中。