2

使用相同长度的数组时,请考虑创建一个仅包含数组的结构,以便通过简单地将结构复制到另一个结构中来更轻松地复制数组。

结构的定义和声明如下:

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

Array array1;

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

Array array2;
array2 = array1;

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

编辑: X 是一个任意常数,比如说 10。该数组不是可变长度数组。

4

3 回答 3

2

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

Array array1;
array1.array[0] // to access the first element
于 2012-06-04T21:43:21.327 回答
1

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


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

于 2012-06-04T21:49:05.610 回答
1

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

随着优化关闭,所有性能赌注都被关闭。

于 2012-06-04T22:08:37.307 回答