Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Does realloc of memory allocated by C11 aligned_alloc keep the alignment?

Consider the following (C11) code:

void *ptr = aligned_alloc(4096, 4096);
... // do something with 'ptr'
ptr = realloc(ptr, 6000);

Since the memory that ptr points to has a 4096-byte alignment from aligned_alloc, will it (read: is it guaranteed to) keep that alignment after a (successful) call to realloc? Or could the memory revert to the default alignment?

like image 651
Drew McGowen Avatar asked Dec 01 '13 16:12

Drew McGowen


1 Answers

The alignment is not kept with the pointer. When you call realloc you can only rely on the alignment that realloc guarantees. You'll need to use aligned_alloc to perform any reallocations.

like image 54
David Heffernan Avatar answered Oct 03 '22 19:10

David Heffernan