gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 16:21:46 24 4
gpt4 key购买 nike

对于字母表中的每个字母,我都有一个如下声明的 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
};

然后我用指向这些的指针创建另一个数组。

int const * text[] = { A, B, C };

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

例如这个有效:

int const * text[] = { A, A, A, A, A, A, A, A }; // could even go on much longer

但这会崩溃:

int const * text[] = { A, B, C, D }; // it seems the number of different entries matters

这是为什么呢?我认为如果它是指针,那么它指向什么应该无关紧要,它总是具有恒定大小?

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

最佳答案

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

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

关于有限内存平台(arduino)上指向数组的指针的 C++ 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9454044/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com