C 效率:8个阵列与多维阵列
什么更有效率?8个数组C 效率:8个阵列与多维阵列,c,pic,microchip,C,Pic,Microchip,什么更有效率?8个数组int8 myArrayx[100],还是多维int8 myArray[8][100]?我正在使用微芯片PIC微控制器的CCS编译器,我需要在缓冲区中以尽可能快的速度写入,这就是我的问题所在。这取决于您最容易访问的项目。 但这可能并不重要。唯一的区别是底层内存映射分配。这取决于您访问最多的项目。 但这可能并不重要。唯一的区别是底层内存映射分配。取决于数组的分配方式。如果在堆上,则为单个多维。由于引用的局部性,数组在很多情况下都会更快,而且您可以一次性分配数组,这更简单,开销
int8 myArrayx[100]
,还是多维int8 myArray[8][100]
?我正在使用微芯片PIC微控制器的CCS编译器,我需要在缓冲区中以尽可能快的速度写入,这就是我的问题所在。这取决于您最容易访问的项目。
但这可能并不重要。唯一的区别是底层内存映射分配。这取决于您访问最多的项目。
但这可能并不重要。唯一的区别是底层内存映射分配。取决于数组的分配方式。如果在堆上,则为单个多维。由于引用的局部性,数组在很多情况下都会更快,而且您可以一次性分配数组,这更简单,开销也更小 如果在堆栈上或
静态
,实际生成的二进制代码可能完全相同
(我不确定您的设备中是否真的有堆,但我想我还是要提到;)取决于阵列的分配方式。如果在堆上,则为单个多维。由于引用的局部性,数组在很多情况下都会更快,而且您可以一次性分配数组,这更简单,开销也更小 如果在堆栈上或
静态
,实际生成的二进制代码可能完全相同
(我不确定你的设备中是否有堆,但我想我还是要提到它;)我不得不认为多维数组会更快。您有一个非常非常好的机会(可能有保证?)将这些数组放在相邻空间的内存中,而您无法确定8个单独的数组在内存中是否“紧密”在一起,这会损害您的引用位置。我不得不认为多维数组会更快。您有一个非常非常好的机会(可能有保证?)将这些数组放入相邻空间中的内存中,而您不能确定8个单独的数组是否“接近”一起在内存中-损害引用的位置。为什么不尝试以最自然的方式编写,然后决定是否需要改进?为了提高速度,请使用指向数组元素的指针,该数组元素只需要为每次连续访问增加或增加一个数,而不是索引myArray[i]需要乘法运算的样式。如果您想使用PIC并获得性能,请不惜一切代价避免使用C。这张照片本身速度很慢。您的问题的答案是,尝试两种方法,然后分解并查看生成的内容。PIC或任何平台。使用PIC,您可以计算周期,其他平台需要更多的工作和知识来研究组装,因此对于您的平台,您只需查看即可看到性能差异。对于您的问题,除了“这取决于…”之外,没有一个通用的答案。您为什么不尝试以最自然的方式编写,然后决定是否需要改进?为了提高速度,请使用指向数组元素的指针,该数组元素在每次连续访问时只需要增量或加法,而不是索引myArray[i]需要乘法运算的样式。如果您想使用PIC并获得性能,请不惜一切代价避免使用C。这张照片本身速度很慢。您的问题的答案是,尝试两种方法,然后分解并查看生成的内容。PIC或任何平台。使用PIC,您可以计算周期,其他平台需要更多的工作和知识来研究组装,因此对于您的平台,您只需查看即可看到性能差异。对于你的问题,没有一个通用的答案,除了“这取决于……”同步存储系统PIC中的局部性?同步存储系统PIC中的局部性?