C または C++ 標準が、 realloc が小さい (ゼロ以外の) サイズで呼び出されたときにポインターが変更されないことを保証するかどうか疑問に思っています。
size_t n=1000;
T*ptr=(T*)malloc(n*sizeof(T));
//<--do something useful (that won't touch/reallocate ptr of course)
size_t n2=100;//or any value in [1,n-1]
T*ptr2=(T*)realloc(ptr,n2*sizeof(T));
//<-- are we guaranteed that ptr2==ptr ?
基本的に、OS は、大きなメモリ ブロックを解放したので、すべての再割り当てを利用してメモリを最適化し、何らかの方法で ptr2 を移動することを独自に決定できますか?