Non sto cercando di migliorare le prestazioni o l'utilizzo della memoria, questa domanda è stata puramente scatenata dalla curiosità.Come vengono impacchettati i piccoli tipi di dati in C#
principale domanda Data la seguente classe sarà il compilatore C# (Mono + NET) imballare i due short
variabili in 4 byte o si consumano 8 byte (con allineamento)?
public class SomeClass {
short a;
short b;
}
questione secondaria Se la risposta alla domanda di cui sopra non è stato di 4 byte, sarebbe la seguente offerta alternativa alcun vantaggio (dove SomeClass
viene utilizzato in grandi quantità):
// Warning, my bit math might not be entirely accurate!
public class SomeClass {
private int _ab;
public short a {
get { return _ab & 0x00ff; }
set { _ab |= value & 0x00ff;
}
public short b {
get { return _ab >> 8; }
set { _ab |= value << 8; }
}
}
Il compilatore C# non avrà nulla a che fare con esso - sarà il runtime. –
Quando si dice "viene usato in quantità molto grandi" - di quanti stiamo parlando e in che modo vengono utilizzati? Stai facendo un array/elenco/etc di questi? –
@ReedCopsey Sì, la teoria di questo contesto sarebbe una grande lista con accesso frequente a voci specifiche per indice. –