我想知道将两个不同的数组组合成一个更大的数组的最快(或非常快)的方法是什么.举个简单的例子,假设我想组合初始化的数组int smallArray0[3]int smallArray1[2].

例如,我可以通过mallocs,memcpys和frees使用指针,但我的印象是(如果我错了,请纠正我)将所有内容都保存在堆栈中(对于较小的数据量)更快.因此,我们不要使用动态分配.

如果我想要实际复制数据,我只能考虑声明一个int biggerArray[5]并使用for/While循环来填充它,如下所示:

for (int i = 0; i < 3; i++)
    biggerArray[i] = smallerArray0[i];
for (i = 3; i < 5; i++)
    biggerArray[i] = smallerArray1[i - 3];

有没有一种方法,不需要复制数据,而是有某种指针,顺序地指向smallArray0的所有元素,最后指向smallArray1?如果可以的话,这样会更快吗?

我希望这是有道理的,如果没有,我很乐意澄清.

推荐答案

感谢所有人的大量输入,我确实学到了大量关于C语言和数组的底层 struct 的知识.看起来memcpy(带或不带偏移量)似乎是最快的方法,尤其是因为至少glibc implementation of memcpy可以逐字复制而不是逐字节复制,而且正如Ludin的注释所提到的那样,使用for循环复制数组经常会产生与使用memcpy相同的机器代码(当然,这取决于编译器).

C++相关问答推荐

为什么海湾合作委员会在共享对象中的. init_data的虚拟内存地址之前留出一个空白

Apple Libm的罪恶功能

如何解决C中的严格别名?

将 typewriter LF打印到Windows终端,而不是隐含的CR+LF

C语言编译阶段与翻译阶段的关系

为什么GDB/MI进程的FIFO循环中有read()阻塞

如何在c++中包装返回空*的函数

在C++中通过空指针隐式访问常量变量的值

为静态库做准备中的奇怪行为

如何在ASM中访问C struct 成员

仅从限制指针参数声明推断非混叠

我可以创建适用于不同endian的 colored颜色 struct 吗?

为什么Linux无法映射这个PT_LOAD ELF段?

在下面的C程序中,.Ap0是如何解释的?

将复合文字数组用作临时字符串缓冲区是否合理?

访问未对齐联合的成员是否为未定义行为,即使被访问的成员已充分对齐?

Makefile - 将 .o 文件放入子文件夹中

快速准确计算double的小数指数

Clang 是否为内联汇编生成了错误的代码?

strlen 可以是[[未排序]]吗?