Istnieje kilka wersji wyrównane czcigodnego malloc()
, np .:Czy naprawdę nie ma wersji realloc() obsługującej wyrównanie?
#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);
(pochodzące POSIX glibc i Linux libc odpowiednio). Ale - nie mogę znaleźć żadnej wzmianki o wersji realloc()
, która obsługuje wyrównanie. Czy to naprawdę nigdy nie zostało zrealizowane? Wydaje się dość banalne połączenie funkcji niezaokrąglonego realloc()
z wyszukiwaniem wyrównanego fragmentu pamięci w dopasowanych wariantach malloc()
.
pokrewne:
Does realloc keep the memory alignment of posix_memalign?
Tak. Nie ma z wielu powodów. Jedną z nich jest to, że przydzielone alokowane funkcje nie zapisują informacji o rozmiarze danych bloku, którego dotyczą, i żadna kopia danych nie jest możliwa. Zostało to pozostawione deweloperowi aplikacji. Było wiele powodów, bardzo aktywnie dyskutowanych wiele lat temu - zobacz odpowiednie archiwa listy mailingowej dla szczegółów –
@PeterJ: Czy mówisz, że wyrównane funkcje alokacji zapisują _less_ informacje niż to, co 'malloc()' zapisuje? Bardzo w to wątpię ... w każdym razie, jeśli uda ci się to jeszcze bardziej, najlepiej z linkiem do tej dyskusji, opublikuj odpowiedź. – einpoklum
Nie mniej. Temat jest zbyt skomplikowany na forum. Przejrzyj archiwa listy adresowej w celu wyjaśnienia. –