复制数组的最快方法 - 它有什么问题吗?

时间:2012-06-04 21:39:22

标签: c performance

使用相同长度的数组时,请考虑创建一个只包含数组的结构,这样只需将结构复制到另一个数组中就可以更轻松地复制数组。

结构的定义和声明如下:

typedef struct {
    char array[X]; /* X is an arbitrary constant */
} Array;

Array array1;

然后,只需执行以下操作即可执行复制:

Array array2;
array2 = array1;

我发现这是复制数组的最快方法。它有什么缺点吗?

编辑: X是一个任意常量,假设为10.数组不是可变长度数组。

3 个答案:

答案 0 :(得分:2)

X可以是任意的(直到编译环境的限制),但对于Array类型的所有对象,它(自然地)是相同的数字。如果你需要将许多相同长度和类型的数组相互复制,那么就没有什么本质上的错误,尽管访问这些数组可能比平时更麻烦。

Array array1;
array1.array[0] // to access the first element

答案 1 :(得分:1)

这很好用,但由于X必须在编译时定义,所以它相当不灵活。您可以使用memcpy在任意长度的数组上获得相同的性能。实际上,编译器通常会将array2 = array1转换为对memcpy的调用。


正如评论中所提到的,直接赋值是否被转换为memcpy调用取决于数组的大小以及其他编译启发式。

答案 2 :(得分:1)

它完全取决于您使用的编译器和优化级别。编译器“应该”将其减小到具有常量大小的memcpy,而这应该减少到用于复制各种大小的内存块的任何机器特定操作。如今,小块应该是高度机器特定的。实际上调用memcpy库函数来复制4个字节将是“10年前”。

通过优化所有性能投注均已关闭。