我想移动我记忆中的大量数据。不幸的是,这些数据被保存为一个数组,我无法改变它。我不能使用循环数组,因为我不想更改的几个 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 调用,但不是每次!所以它可以更快,不是吗?