gpt4 book ai didi

c - 有效地附加一个带有零的大数组?

转载 作者:太空狗 更新时间:2023-10-29 14:54:11 25 4
gpt4 key购买 nike

我有一个名为 A 的数组,其中包含随机 float ,其大小在 [10000, 1000000] 范围内的任意位置。这个数组是我函数的一个随机生成的参数,为了对其进行操作,我试图以一种有效的方式先发制人地附加/填充 10000 个零。我担心附加 A 分配的内存会破坏堆,因此我分配新内存、memcopy A 和 memset 10000 新数组中的尾部 float 为 0.0。

void *ArrayPadder(float *A){
int pad = 10000;
float *Apadded = (float*)malloc((sizeof(A)+pad)*sizeof(float));
memcpy(Apadded, A, sizeof(A));
memset(Apadded+sizeof(A), 0.0, pad);
return Apadded;
}

谁能建议一种更有效的方法来完成此任务?

编辑:对延迟表示歉意,但我添加了一些说明。我不能预先分配正确的内存空间(510000 个 float )的原因是数组实际上是随机大小的,包含随机 float 。我选择 500000 是为了简化问题,该问题现已解决。

最佳答案

不是更有效的方法,而是更准确的方法:

memset(Apadded+sizeof(A), 0, pad * sizeof(float));

就好像 float 的大小是 4,你的代码只初始化第一个 pad/sizeof(float) = 10000/4 = 2500 个元素

请注意,我使用 0 而不是 0.0 作为第二个参数,因为 memset 接受一个 int 并设置它的(低字节)值到所有字节。

关于c - 有效地附加一个带有零的大数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13185255/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com