I want to move a large chunk of data i've got in my memory. Unfortunately this data is saved as an array, and i cannot change that. I can't use circular arrays, because the same memory is also used by a couple of fortran methods i do not want to change. On top of it, the arrays are accessed very very often in between the movement. So i can do this:
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);
This should work fine, but it looks so wasteful ;). If i could tell my compiler to take away data on the left side of a shrinking array, my data would sort of creep through the memory, but i wouldn't have to do any copying. Like this:
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);
So basically i want to finish with a pointer to array+1
, with the 4 byte left of it freed. I played around with free()
and malloc()
but it didn't work...
I'm aware that the realloc could also result in a memcpy call, but not everytime! So it could be faster, couldn't it?