Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 效率:8个阵列与多维阵列_C_Pic_Microchip - Fatal编程技术网

C 效率:8个阵列与多维阵列

C 效率:8个阵列与多维阵列,c,pic,microchip,C,Pic,Microchip,什么更有效率?8个数组int8 myArrayx[100],还是多维int8 myArray[8][100]?我正在使用微芯片PIC微控制器的CCS编译器,我需要在缓冲区中以尽可能快的速度写入,这就是我的问题所在。这取决于您最容易访问的项目。 但这可能并不重要。唯一的区别是底层内存映射分配。这取决于您访问最多的项目。 但这可能并不重要。唯一的区别是底层内存映射分配。取决于数组的分配方式。如果在堆上,则为单个多维。由于引用的局部性,数组在很多情况下都会更快,而且您可以一次性分配数组,这更简单,开销

什么更有效率?8个数组
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中的局部性?