Es existieren mehrere ausgerichtete Versionen des venerable malloc()
, z.B .:Gibt es wirklich keine Version von realloc(), die Ausrichtung unterstützt?
#include <stdlib.h>
int posix_memalign(void **memptr, size_t alignment, size_t size);
void *aligned_alloc(size_t alignment, size_t size);
#include <malloc.h>
void *memalign(size_t alignment, size_t size);
(Ursprung in POSIX, glibc und Linux libc respectively). Aber - ich finde keine Erwähnung einer Version von realloc()
, die Ausrichtung unterstützt. Wurde es wirklich nie umgesetzt? Es scheint ziemlich trivial zu sein, die Funktionalität von nicht-ausgerichtetem realloc()
mit der Suche nach einem ausgerichteten Speicherstück in den ausgerichteten malloc()
-Varianten zu kombinieren.
Verwandte:
Does realloc keep the memory alignment of posix_memalign?
Ja. Aus vielen Gründen gibt es keins. Eine besteht darin, dass die zugewiesenen zugewiesenen Funktionen keine Information über die Datengröße des allignierten Blocks speichern und keine Kopie von Daten möglich ist. Es wurde dem Anwendungsentwickler überlassen. Es gab viele Gründe dafür, sehr aktiv diskutiert vor vielen Jahren - siehe die entsprechenden Mailinglistenarchive für Details –
@PeterJ: Sagen Sie, die ausgerichteten Zuordnungsfunktionen speichern _less_ Informationen als was 'malloc()' speichert? Ich bezweifle es sehr ... auf jeden Fall, wenn Sie dies mehr ausdrücken können, vorzugsweise mit einem Link zu einigen dieser Diskussion, bitte posten Sie eine Antwort. – einpoklum
Nicht weniger. Das Thema ist zu kompliziert für das Forum. Durchsuchen Sie die Mailinglisten-Archive nach Erklärungen. –