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平台上运行的,它的内存非常有限.
我怀疑正在优化对具有相同元素的数组的查找;如果int const *text[];在头文件中声明并在单独的目标文件中编译(定义),您可能会遇到相同的问题。链接器正在尽其所能,但所有数据可能与堆/堆栈空间重叠。
至少对于 avr-libc(使用 avr-gcc、avr-binutils),有宏或变量属性可以将此类常量数据放置在更大的只读程序空间(闪存 ROM)中。
| 归档时间: |
|
| 查看次数: |
1135 次 |
| 最近记录: |