Macheta ambalată și înregistrarea ambalată.
Oh. Scuze. Nu m-am uitat în certificat. Se întâmplă asta!
Dar, totuși, voi specifica: matricea ambalată poate fi necesară numai atunci când se stochează structuri cu o dimensiune care nu este un multiplu de 4 octeți?
Aproximativ 4 octeți nu pot să spun. Este mai bine, IMHO, cu orice structură specificată în mod explicit ambalată în cazul în care independența dimensiunii față de orice aliniere este cerută în mod clar.
> Trebuie doar să fii sigur
nu este fericit ca asta. lăsați-o apoi să fie împachetată
doar un mic but - unde - a văzut că nu sfătuiesc să folosească ambalate - acest lucru poate scădea performanța, deoarece toate acum capacitatea de procesor și dacă încercați să utilizați ceva în zona de 16-24 va avea un impact mare. În general, unii dintre proții sunt în general optimizați pentru a lucra cu 32 de biți și sunt foarte lenți cu alte tipuri.
În ceea ce privește matricea ambalată: Am avut întotdeauna sentimentul că mănâncile din Delphi sunt întotdeauna ambalate. Iată o piesă, trimisă la D3 și D6, a confirmat: a dat două cincizeci. Deși ca și în Delphi.Net - nu știu.
var
a: matrice [1..5] de octet;
b: matrice împachetată [1..5] de byte;
iniţializarea
ShowMessage (IntToStr (dimensiunea (a)) + "" + IntToStr (dimensiunea (b)));
end.
Când este activată opțiunea Câmpul de înregistrare aliniate, dimensiunile înregistrărilor care lipsesc sunt împachetate. va fi aliniat la o limită de 32 de biți (multipli de 4). Dacă este prezentă ambalajul, atunci dimensiunile rămân neschimbate.
R: înregistrări ambalate
# xA0; ID: întreg;
# xA0; Count: cuvânt;
se încheie;
Dimensiunea este de 6 octeți, indiferent de opțiunea setată. Dacă eliminați ambalajul. atunci dimensiunea va fi de 8 octeți.
Dacă opriți opțiunea, nu este necesară prezența ambalajului.
Același lucru este valabil și pentru matrice.
AFAIK, această opțiune nu este pornită / oprită, dar 1-2-4-8.
> Același lucru este valabil și pentru matrice.
O cerere mare de a arăta acest lucru cu un exemplu.
Am încercat deja - la fel. Adevărat, am avut o serie de înregistrări, iar în înregistrare erau cuvânt și octet.
punerea în aplicare
tip
t5 = înregistrare în ambalaj
# xA0; b0, b1, b2, b3, b4: byte;
se încheie;
a = matrice [1..5] din t5;
b = matricea ambalată [1..5] din t5;
iniţializarea
AfișareMessage (IntToStr (Sizeof (a)) + "" + IntToStr (Sizeof (b)));
2 GuAV: Ce vrei să spui prin asta? Alinierea depinde doar de această opțiune de proiect ($ A + sau $ ALIGN ON în text).
Directiva $ A controlează alinierea câmpurilor în tipurile de înregistrări Delphi și în structurile de clasă.
În stare sau în câmp, câmpurile nu sunt niciodată aliniate. Toate înregistrările și structurile de clasă sunt împachetate.
În stat, câmpurile din tipurile de înregistrări sunt.
În stare, câmpurile din tipurile de înregistrări care sunt declarate fără modificatorul ambalat și câmpurile din clasă sunt aliniate la limitele cu două cuvinte.
În sau în stare, câmpurile din tipurile de înregistrări care sunt declarate fără modificatorul ambalat și câmpurile din clasă.
În ajutorul tipurilor de Integer
în placa inferioară - tipul fundamental de dimensiune constantă, la vârf - generic # xA0; - Integer și Cardinal, referindu-se la platforma hardware actuală.
Iată întregul folosit pentru a fi (în epoca de 16 biți) a fost de două octeți, de exemplu.