Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    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

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    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).

  3. #3
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    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

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    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 ...

  5. #5
    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 ...
    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...

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ti passo il termine ... comunque sono byte e non bit di padding ...

  7. #7
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    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 ...
    Non sono riuscito a capire proprio bene...
    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

  8. #8
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    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 ...
    Non sono riuscito a capire proprio bene...
    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

  9. #9
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,317

    Moderazione

    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

  10. #10
    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

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.