2011-08-13 12 views
8

Mam problemy z zrozumieniem celu słów kluczowych i nie jestem pewien, czy w pełni rozumiem, czym jest dopasowanie.Do czego służą alignacje i alignmentof słów kluczowych?

Jak rozumiem, adres pamięci jest dopasowywany do n bajtów, jeśli jest podzielny przez n, to znaczy, że można go uzyskać przez zliczanie "n" bajtów na raz (od 0? Lub jakiejś wartości domyślnej?). Ponadto, słowo kluczowe alignas, podczas prefiksowania deklaracji zmiennych, określa sposób wyrównania adresu, pod którym zmienna jest przechowywana, i alignof zwraca sposób wyrównania adresu zmiennej.

Jednak nie mam pewności, czy jest to poprawne zrozumienie dopasowania lub słów kluczowych alignof/alignas - proszę poprawić mnie w każdym z punktów mam źle. Nie widzę również, do czego służą te słowa kluczowe, więc byłbym wdzięczny, gdyby ktoś mógł wskazać, jaki jest ich cel.

Odpowiedz

8

Niektóre typy specjalne muszą być wyrównane do większej liczby bajtów niż zwykle - na przykład macierze muszą być wyrównane do 16 bajtów na x86, aby uzyskać najbardziej wydajne kopiowanie na GPU. Typy wektorów SSE również mogą się tak zachowywać. W związku z tym, jeśli chcesz utworzyć typ kontenera, musisz znać wymagania wyrównania typu, który próbujesz zawrzeć lub przydzielić.

+0

Następnie słowa kluczowe są używane tylko w celu uzyskania efektywności w pewnych okolicznościach? –

+0

@ Keand64: na wielu platformach i sytuacjach nieprawidłowe ustawienie jest błędem. x86 jest bardziej wyrozumiały. W ogólnym przypadku należy przestrzegać wymaganego wyrównania UDT. – Puppy

+0

W porządku, dzięki. –

Powiązane problemy