gpt4 book ai didi

realloc 可以在左侧缩小我的数组(仅限 C)吗?

转载 作者:太空狗 更新时间:2023-10-29 15:22:53 25 4
gpt4 key购买 nike

我想移动内存中的大量数据。不幸的是,这些数据被保存为一个数组,我无法更改它。我不能使用圆形数组,因为我不想更改的几个 fortran 方法也使用相同的内存。最重要的是,在移动之间非常频繁地访问数组。所以我可以这样做:

int *array = (int*) malloc(sizeof(int)*5);
int *array2=NULL;
//Now i want to move my data one step to the left
array=(int*) realloc(array,6);
array2=array+1;
memmove(array,array2,5*sizeof(int));
array=(int*) realloc(array,5);

这应该可以正常工作,但看起来很浪费 ;)。如果我可以告诉我的编译器取走缩小数组左侧的数据,我的数据就会在内存中爬行,但我不必进行任何复制。像这样:

int *array = (int*) malloc(sizeof(int)*5);
//Now i want to move my data one step to the left
array=(int*) realloc(array,6);
array=(int*) realloc_using_right_part_of_the_array(array,5);

所以基本上我想以一个指向 array+1 的指针结束,释放它剩下的 4 个字节。我玩过 free()malloc() 但它没有用......我知道 realloc 也可能导致 memcpy 调用,但不是每次都这样!所以它可以更快,不是吗?

最佳答案

没有。没有办法归还你分配的内存的下半部分。此外,您的原始代码是错误的,因为您正在复制不确定的内存。

int *array = (int*) malloc(sizeof(int)*5);
// Fill memory:
// array - {'J', 'o', h', 'n', '\0'};
int *array2=NULL;
//Now i want to move my data one step to the left
array=(int*) realloc(array,6);
// array - {'J', 'o', h', 'n', '\0', X};
array2=array+1;
// array2 pointer to 'o of array.
memmove(array,array2,5*sizeof(int));
// This copies the indeterminate x:
// array - {'o', h', 'n', '\0', X, X}
array=(int*) realloc(array,5);
// array - {'o', h', 'n', '\0', X}

X 表示不确定。

关于realloc 可以在左侧缩小我的数组(仅限 C)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3841955/

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