Cosa sono i byte di padding?
Cosa sono i byte di padding?
"Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)
"Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)
http://xvincentx.netsons.org/programBlog
Quelli che, nel caso specifico, il compilatore inserisce tra un campo e un altro di una struttura in modo da "allinearli" in maniera opportuna (rispetto al loro indirizzo di memoria).
e perchè li mette? perchè allinea la struttura?
Ho anche visto che in una struttura è possibile mettere cambi bit anonimi per allineare la struttura...ma a che serve?
"Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)
"Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)
http://xvincentx.netsons.org/programBlog
Serve ad ottimizzare gli accessi in memoria da parte delle CPU.
In realta', una CPU a 32 bit riesce ad accedere in memoria in modo piu' efficiente e veloce se l'indirizzo a cui sta accedendo e' allineato ai 32 bit, appunto.
Se in memoria hai i byte allineati in questo modo
X1 X2 X3 X4
Y1 Y2 Y3 Y4
in cui i byte X1 e Y1 sono allineati ai 32 bit, per leggere i dati X4 e Y1 in blocco, in realta' la CPU deve effettuare due operazioni, la lettura dei primi 4, di cui scartera' i primi 3 e la lettura degli altri 4, di cui scarterà gli ultimi 3. Leggera' quindi
.. .. .. X4
Y1 .. .. ..
8 byte ...
Se al, contrario, il byte X4 fosse allineato, imponendo un byte di padding, in questo modo
X1 X2 X3 PP
X4 Y1 Y2 Y3
la CPU potrebbe leggere il valore a 16 bit composto da X4 e Y1 in una sola lettura, utilizzando i primi due byte e scartando gli altri due.
Non so se mi sono spiegato ...
se ho interpretato bene, i bit di padding servono per "ordinare" (passatemi il termine) i dati in memoria in modo da consentire alla CPU di leggere i dati con la massima efficienza...Originariamente inviato da oregon
Serve ad ottimizzare gli accessi in memoria da parte delle CPU.
In realta', una CPU a 32 bit riesce ad accedere in memoria in modo piu' efficiente e veloce se l'indirizzo a cui sta accedendo e' allineato ai 32 bit, appunto.
Se in memoria hai i byte allineati in questo modo
X1 X2 X3 X4
Y1 Y2 Y3 Y4
in cui i byte X1 e Y1 sono allineati ai 32 bit, per leggere i dati X4 e Y1 in blocco, in realta' la CPU deve effettuare due operazioni, la lettura dei primi 4, di cui scartera' i primi 3 e la lettura degli altri 4, di cui scarterà gli ultimi 3. Leggera' quindi
.. .. .. X4
Y1 .. .. ..
8 byte ...
Se al, contrario, il byte X4 fosse allineato, imponendo un byte di padding, in questo modo
X1 X2 X3 PP
X4 Y1 Y2 Y3
la CPU potrebbe leggere il valore a 16 bit composto da X4 e Y1 in una sola lettura, utilizzando i primi due byte e scartando gli altri due.
Non so se mi sono spiegato ...
Ti passo il termine ... comunque sono byte e non bit di padding ...
Non sono riuscito a capire proprio bene...Originariamente inviato da oregon
Serve ad ottimizzare gli accessi in memoria da parte delle CPU.
In realta', una CPU a 32 bit riesce ad accedere in memoria in modo piu' efficiente e veloce se l'indirizzo a cui sta accedendo e' allineato ai 32 bit, appunto.
Se in memoria hai i byte allineati in questo modo
X1 X2 X3 X4
Y1 Y2 Y3 Y4
in cui i byte X1 e Y1 sono allineati ai 32 bit, per leggere i dati X4 e Y1 in blocco, in realta' la CPU deve effettuare due operazioni, la lettura dei primi 4, di cui scartera' i primi 3 e la lettura degli altri 4, di cui scarterà gli ultimi 3. Leggera' quindi
.. .. .. X4
Y1 .. .. ..
8 byte ...
Se al, contrario, il byte X4 fosse allineato, imponendo un byte di padding, in questo modo
X1 X2 X3 PP
X4 Y1 Y2 Y3
la CPU potrebbe leggere il valore a 16 bit composto da X4 e Y1 in una sola lettura, utilizzando i primi due byte e scartando gli altri due.
Non so se mi sono spiegato ...
Ad ogni modo
"Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)
"Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)
http://xvincentx.netsons.org/programBlog
Non sono riuscito a capire proprio bene...Originariamente inviato da oregon
Serve ad ottimizzare gli accessi in memoria da parte delle CPU.
In realta', una CPU a 32 bit riesce ad accedere in memoria in modo piu' efficiente e veloce se l'indirizzo a cui sta accedendo e' allineato ai 32 bit, appunto.
Se in memoria hai i byte allineati in questo modo
X1 X2 X3 X4
Y1 Y2 Y3 Y4
in cui i byte X1 e Y1 sono allineati ai 32 bit, per leggere i dati X4 e Y1 in blocco, in realta' la CPU deve effettuare due operazioni, la lettura dei primi 4, di cui scartera' i primi 3 e la lettura degli altri 4, di cui scarterà gli ultimi 3. Leggera' quindi
.. .. .. X4
Y1 .. .. ..
8 byte ...
Se al, contrario, il byte X4 fosse allineato, imponendo un byte di padding, in questo modo
X1 X2 X3 PP
X4 Y1 Y2 Y3
la CPU potrebbe leggere il valore a 16 bit composto da X4 e Y1 in una sola lettura, utilizzando i primi due byte e scartando gli altri due.
Non so se mi sono spiegato ...
Ad ogni modo questo byte padding è effettuato in automatico? Se volessi effettuarlo mettendo degli unsigned anonimi in che modo devo proseguire (nel senso quanti bit devo dirgli di mettere)?
"Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)
"Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)
http://xvincentx.netsons.org/programBlog
Visto che la discussione ha preso una "sbandata" verso un altro argomento, la divido e creo una nuova discussione.
Ciao.![]()
"Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza
Il padding normalmente viene effettuato di default a meno di non specificare nelle opzioni del compilatore (/Zp1 per Vc) o attravetso la direttiva #pragma pack.
Comunque se ne era già parlato QUI