Я хочу переместить большой кусок данных, которые у меня в памяти. К сожалению, эти данные сохраняются в виде массива, и я не могу это изменить. Я не могу использовать циклические массивы, потому что та же память также используется парой методов Фортрана, которые я не хочу менять. Вдобавок к этому, массивы очень часто доступны между движениями. Так что я могу сделать это:
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, но не каждый раз! Так могло бы быть быстрее, не так ли?