$A: Zarovnávání dat

From Delphi & Pascal (česká wiki)
Jump to navigation Jump to search

Přepíná mezi zarovnáním adres proměnných nebo typových konstant na hranici bajtu nebo slova (word).

 Syntaxe:       {$A+} nebo {$A-}
 Implicitně:    {A+}
 Typ:           Globální
 Povel menu:    Options|Compiler|Align Data
Popis
Zarovnávání na slovo nemá vliv u CPU 8088.
U celé rodiny CPU 80x86 zarovnávání na slovo zrychluje vykonávání. Části dat o velikosti 1 slova
  • na sudých adresách jsou zpřístupněny v jednom cyklu procesoru
  • na lichých adresách ve dvou cyklech.
Režim $A+

V tomto případě jsou všechny proměnné a typové konstanty větší než 1 bajt zarovnány na hranici strojového slova (na sudou adresu).

V případě potřeby jsou nepoužité bajty ukládány mezi proměnné k docílení zarovnání na slovo.

$A+ nemá vliv na proměnné velikosti 1 bajtu, položky záznamů a prvky polí.

Položka záznamu bude zarovnána na slovo pouze tehdy, jestliže celková velikost všech položek před ní je sudá.

Aby prvky pole byly zarovnány na slovo, jejich délka musí být sudá.

Režim $A-

Zde není prováděno žádné zarovnávání.

Proměnné a typové konstanty jsou jednoduše umístěny na nejbližší volnou adresu bez ohledu na svoji velikost.

Pozn.: Bez ohledu na režim $A, každá globální deklarace var a const začíná na hranici slova.

Kompilátor se vždy pokouší udržet ukazatel zásobníku SP zarovnaný na slově alokací nevyužitého bajtu v zásobníkovém rámci procedury.