Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
"simbolo": allineamento di un membro sensibile alla compressione
Osservazioni:
Il compilatore ha aggiunto della spaziatura interna per allineare un membro della struttura al limite di compressione, ma il valore di compressione è inferiore alle dimensioni del membro.
Example
Il frammento di codice seguente, ad esempio, genera l'errore C4121:
// C4121.cpp
// compile with: /W4 /c
#pragma pack(2)
struct s
{
char a;
int b; // C4121
long long c;
};
Per risolvere l'errore, apportare una delle modifiche seguenti:
Allineare le dimensioni di compressione alle dimensioni del membro che ha causato l'avviso o impostare dimensioni superiori. In questo frammento, ad esempio, modificare
pack(2)inpack(4)opack(8).Riordinare le dichiarazioni dei membri in base alle dimensioni, dalla più grande alla più piccola. Nel frammento invertire l'ordine dei membri della struttura in modo che il membro
long longprecedainteintprecedachar.
Questo avviso viene visualizzato solo quando il compilatore aggiunge della spaziatura interna prima dei membri dati. Non viene visualizzato se in seguito alla compressione i dati si trovano in una posizione di memoria non allineata per il tipo di dati e prima del membro dati non è stata inserita spaziatura. Se i dati non sono allineati a limiti che sono multipli delle dimensioni dei dati stessi, è possibile che si verifichi un calo delle prestazioni. Su alcune architetture, la lettura e la scrittura di dati non allineati causano errori del processore la cui risoluzione potrebbe richiedere molto più tempo. Gli accessi ai dati non allineati non possono essere portati su alcune architetture RISC.
È possibile usare #pragma pack o /Zp per specificare l'allineamento della struttura. Il compilatore non genera questo avviso quando si specifica /Zp1 .