Как я понимаю, когда просят резервировать больший блок памяти, функция перераспределить() будет делать один из трех вещей:Определение перераспределить поведения() перед вызовом его
if free contiguous block exists
grow current block
else if sufficient memory
allocate new memory
copy old memory to new
free old memory
else
return null
РОСТОМ текущий блок - очень дешевая операция, так что это поведение, которое я бы хотел использовать. Однако, если я перераспределяю память, потому что хочу (например) вставить символ в начале существующей строки, я не хочу, чтобы realloc() копировал память. Я закончу копирование всей строки с помощью realloc(), а затем снова скопирую ее вручную, чтобы освободить первый элемент массива.
Можно ли определить, что будет делать realloc()? Если да, можно ли достичь кросс-платформенного подхода?
Последнее из ваших 3 случаев неверно, realloc вернет нулевой указатель, если недостаточно памяти, а не указатель, который вы передали. – 2008-10-19 14:19:49
Как сказал Роберт Гэмбл - realloc() возвращает NULL без памяти. – 2008-10-19 14:43:09
Спасибо, исправлены псевдокоды. – Ant 2008-10-19 14:57:21