我正在为微 Controller 开发 C 语言的 FFT 算法,但无法决定是将输入数据的实部和虚部仅存储在结构数组中,还是使用指向结构数组的指针.我面临着相互矛盾的要求,即代码必须在少量内存中运行,但又要尽可能快。我相信指向结构的指针数组会有更大的内存开销,但我的代码中有一行基本上如下所示:
for (uint8_t i = 0; i < RECORD_SIZE; i++)
{
uint8_t decimateValue = fft_decimate(i);
fftData[i]->realPart = fftTempData[decimateValue]->realPart;
fftData[i]->imPart = fftTempData[decimateValue]->imPart;
}
我在想,如果我像上面的例子那样使用指向结构的指针数组,那么编译后的代码会更快,因为它只是重新排列指针,而不是像这样实际复制两个数据结构之间的所有数据结构数组的实现会。如果上面的代码部分运行得尽可能快,我愿意牺牲一些额外的内存。感谢您的任何建议。
最佳答案
每次通过指针数组访问数据时,都会有两次内存访问。这通常伴随着管道停顿,即使在微 Controller 上也是如此(除非它是一个没有管道的非常小的微 Controller )。
那你就要考虑数据的大小了。指针有多大? 2个字节? 4字节?结构有多大? 4字节? 8 个字节?
如果结构体的大小是指针的两倍,那么使用指针对数据进行洗牌的开销会减少一半。但是,以任何其他方式读取或修改数据的成本会更高。所以这取决于你的程序做什么。如果您花费大量时间读取数据而只花少量时间对其进行洗牌,请针对读取数据进行优化。其他人说得对——个人资料。确保在您的微 Controller 上进行性能分析,而不是在您的工作站上。
关于c - 使用指向结构的指针数组,还是仅使用结构数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6541387/