Zasadniczo, jeśli trzeba trudniejsze wyrównanie niż malloc da ty. Malloc zasadniczo zwraca wskaźnik wyrównany w taki sposób, że może być używany z dowolnym typem pierwotnym (często 8 bajtów na zwykłych komputerach stacjonarnych).
Czasami jednak wymagana jest pamięć wyrównana do innych granic, na przykład wyrównana do 4K, itd. W takim przypadku potrzebowałbyś memalign
.
Będziesz potrzebować tego, na przykład,
- pisząc menedżera pamięci (takich jak garbage collector). W takim przypadku czasami przydaje się praca z pamięcią wyrównaną przy większych rozmiarach bloków. W ten sposób można przechowywać metadane wspólne dla wszystkich obiektów w danym bloku na dole przydzielonego obszaru i uzyskać do niego dostęp poprzez maskowanie najmniej znaczących bitów wskaźnika obiektu.
- podczas łączenia ze sprzętem (nigdy nie robiłem tego sam, ale IIRC, niektóre rodzaje urządzeń blokowych wymagają wyrównania pamięci). Zobacz odpowiedź n.m. w celu uzyskania szczegółowych informacji.
@ Dirk, wydaje się, że to nie odpowiada ** kiedy ** potrzebujemy. –
Więcej przykładów: Typy SIMD mogą wymagać większego wyrównania, niż oferuje 'malloc'. Kod grający bardzo wymyślne sztuczki dla wydajności może wymagać wyrównania odpowiadającego rozmiarowi linii pamięci podręcznej - jest to prawdopodobnie najczęstsze, jeśli piszesz dynamiczny linker (np. Kod ładujący pliki wykonywalne do pamięci), kod, który ładujesz, może chcieć jego funkcje dostosowane do granic linii pamięci podręcznej. –
@Steve Jessop, czy skorzystamy z rozmiaru pamięci '16 * 1024' i wyrównanego do' 16' zamiast domyślnego '8'? –