As I understand it, when asked to reserve a larger block of memory, the realloc()
function will do one of three different things:
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
Growing the current block is a very cheap operation, so this is behavior I'd like to take advantage of. However, if I'm reallocating memory because I want to (for example) insert a char at the start of an existing string, I don't want realloc()
to copy the memory. I'll end up copying the entire string with realloc()
, then copying it again manually to free up the first array element.
Is it possible to determine what realloc()
will do? If so, is it possible to achieve in a cross-platform way?
realloc()
's behavior is likely dependent on its specific implementation. And basing your code on that would be a terrible hack which, to say the least, violates encapsulation.
A better solution for your specific example is:
malloc()
), greater than the previous one