2008-09-24 39 views
7

Czytałem starszy kod, który invitters w niestandardowym systemie buforowania pamięci, a następnie stwierdziłem, że kod używa _aligned_malloc. Zastanawiam się, jaka jest ta funkcja i kiedy muszę jej użyć.Kiedy należy używać _aligned_malloc()?


Dziękuję wszystkim.

Zrobiłem MSDN, ale chciałem, aby odpowiedź brzmiała następująco: "Przykładem powodu, dla którego chce się ustawić, jest użycie danych z zestawem instrukcji SSE na x86, gdzie dane muszą być wyrównane do wielokrotności 16" .

W końcu zrozumiałem, co oznacza ten kod. dzięki jeszcze raz.

+1

Kolejny przykład - procesor ARM. Wymaga wyrównania wszystkich danych do 4 bajtów. –

Odpowiedz

0

Czy sprawdziłeś dokumentację MSDN? Możesz znaleźć odpowiedni wpis here.

10

Ta funkcja jest przydatna, gdy wyrównanie przydzielonej pamięci jest dla Ciebie ważne. Wyrównanie oznacza, że ​​wartość liczbowa zwróconego wskaźnika musi być równomiernie podzielna przez pewną liczbę, tj. ((unsigned int) ptr) Wyrównanie% powinno wynosić 0.

Przykładem powodu, dla którego chcemy uzyskać określone wyrównanie, jest użycie danych z instrukcją SSE na x86, gdzie dane muszą być wyrównane do wielokrotności 16

+0

Lub próbujesz przechowywać 4 bajty na PowerPC (et al) –

5

Oto przypadek użycia, który możesz odnosić. W moim 17-letnim rozwoju C/C++ potrzebowałem tylko raz funkcji jądra _aligned_malloc() (implementacja WinOS) i memalign (implementacja POSIX), a było to podczas kodowania we/wy dysku niskiego poziomu. Powodem tego jest to, że gdy nie używa się bufora I/O OS (np. W wywołaniu WinOS openfile() z flagą FILE_FLAG_NO_BUFFERING) i odczytywania/zapisywania na dysk, system operacyjny wymaga dopasowania bloku pamięci do rozmiaru sektora dysku; jeśli rozmiar sektora dysków wynosił 512 bajtów i chciałbyś zapisać 1234 bajtów na dysku, zrobiłbym coś takiego:

_aligned_malloc(1234, 512); 
Powiązane problemy