メモリ内にある大量のデータを移動したい。残念ながら、このデータは配列として保存されており、それを変更することはできません。変更したくないいくつかの 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()
andで遊んでみましmalloc()
たが、うまくいきませんでした... realloc によっても memcpy 呼び出しが発生する可能性があることは承知していますが、毎回ではありません! だから、もっと速いかもしれませんよね?