Se ho la seguente classe:Qual è l'ordine ottimale dei membri in una classe?
class Example
{
bool m_b1;
SomeClass m_sc;
bool m_b2;
char * m_name;
bool m_b3;
int m_i1;
SomeClass * m_sc;
int m_i2;
};
Qual è l'ordine ottimale dei membri? Per quanto ne so, l'ordine di dichiarazione dei membri è uguale all'ordine dei membri in memoria, quando si crea un'istanza di questa classe.
- Devo ordinare i membri in modo che i tipi uguali siano insieme?
- Tutti i puntatori contano come lo stesso tipo?
- Il riarrangiamento ha un effetto sulle dimensioni dell'oggetto? Qui si applica l'allineamento a 4 o 8 byte?
- Come posso vedere gli effetti di quanto sopra? Sizeof mostra la memoria utilizzata da un oggetto che include lo spazio vuoto per l'allineamento?
- È meglio alla fine della giornata ordinare i membri in modo che il loro significato e il loro contesto siano più facili da comprendere?
A meno che non si sta programmando per un sistema embedded con poca memoria direi che l'ordine non importa molto. Solo se hai array o un * lotto * di variabili membro (nel qual caso direi che il tuo design è sbagliato) in modo che possa causare problemi di cache e il codice sia estremamente time-critical (che di rado è il caso), solo allora dovresti iniziare a pensare al raggruppamento e all'ordine. Inizia dando priorità alla leggibilità (che implica la manutenibilità), e cambia solo se è assolutamente necessario. –
Direi che la dimensione di overlall dell'oggetto ha un effetto sul runtime molto più di quello in cui viene dichiarato il membro. tutti i membri sono eccessi dalla CPU calcolando 'questo + offset' in fase di compilazione, quindi in runtime non c'è molta differenza –