Perché nel mondo un heap deve essere sicuro di allocarlo negli allineamenti a 8 byte?

5

4-byte = parola; 8 byte = 2x parola

Allora perché l'heap non va con l'allineamento a 4 byte (perché prenderà comunque una parola alla volta, giusto?)

Se siamo andati con allineamenti a 8 byte, perché non 12? 16?

    
posta Dark Templar 10.10.2011 - 21:46
fonte

2 risposte

7

Efficienza e architettura della CPU. Ricordo che quando uscirono i chip Alpha, potevano solo leggere la memoria a 32 bit. Se si desidera leggere il byte 3, si carica un numero a 32 bit, quindi si deve ruotare il risultato per isolare il byte desiderato. Un confronto di stringhe byte per byte tradizionale era abbastanza inefficiente in questa architettura.

Detto questo, non sono sicuro di cosa facciano i processori moderni. È passato un po 'di tempo da quando ho avuto a che fare con questo.

    
risposta data 10.10.2011 - 21:52
fonte
0

La risposta breve è "Non funziona". L'allineamento è associato ai dettagli di implementazione del gestore di heap, niente di più. Il tuo gestore di heap può avere un requisito di allineamento per vari motivi, come efficienza, architettura, capriccio dello scrittore o cosa mai. Se hai una ragione per preoccuparti, per favore condividi con noi.

A proposito:

4-bytes = word 8-bytes = 2x word

Questa è un'ipotesi, non è corretta e ha portato a molti problemi di porting di software vari, a volte costosi e sempre imperdonabili. La dimensione di una parola dipende dall'architettura hardware, dal sistema operativo, dalla lingua e dal compilatore utilizzati.

    
risposta data 10.10.2011 - 22:49
fonte

Leggi altre domande sui tag