在 C 中将各种数组复制到单个较大数组的最快方法,无需动态内存分配

问题描述 投票:0回答:1

我想知道将两个不同的数组组合成一个更大的数组的最快(或非常快)的方法是什么。作为一个玩具示例,假设我想组合初始化数组

int smallArray0[3]
int smallArray1[2]

我可以只使用例如通过 malloc、memcpy 和 free 的指针,但我的印象是(如果我错了,请纠正我)将所有内容保留在堆栈中(对于较小数量的数据)会更快。因此,我们不要使用动态分配。

如果我想对数据进行实际的复制,我只能考虑声明一个

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
的所有元素?如果可以的话,会不会更快?
我希望这是有道理的,如果没有,我很乐意澄清。

arrays c performance copy stack
1个回答
0
投票

#include <stdio.h> #define biggerArray(index) (*((index) < 3 ? smallerArray0 + (index) : smallerArray1 + (index) - 3)) int main(void) { int smallerArray0[3] = {0, 1, 2}; int smallerArray1[2] = {3, 4}; biggerArray(4) = 10; printf("%d %d\n", biggerArray(1), biggerArray(4)); }

宏需要使用 
*(array+index)

语法,因为如果您在三元中使用普通数组索引语法,则它是不可分配的。

    

© www.soinside.com 2019 - 2024. All rights reserved.