ho una semplice classe in C++ che ha un intero e un vtable:MSVC oggetto layout Quirk
class Something {
virtual void sampleVirtualMethod();
int someInteger;
};
Se si guarda la disposizione oggetto per MSVC (utilizzando il/d1reportSingleClassLayout) si ottiene:
class Something size(8):
+---
0 | {vfptr}
4 | someInteger
+---
Che ha senso. 4 byte per il puntatore vtable e 4 byte per il numero intero. La cosa strana è quando aggiungo un doppio alla classe:
class Something {
virtual void sampleVirtualMethod();
int someInteger;
**double someDouble;**
};
ottengo questo layout oggetto:
class Something size(24):
+---
0 | {vfptr}
8 | someInteger
| <alignment member> (size=4)
16 | someDouble
+---
Perché la differenza tra il 0 di offset e someInteger 8 invece di 4? Il vtable è cresciuto fino a 8 byte in qualche modo? Non importa l'ordine di quando aggiungo un doppio, questo succede.
Grazie.
Non posso fare a meno di chiedermi perché ti interesserebbe di questo. Ciò sta causando un problema diretto a ciò su cui stai lavorando? –
Perché * non * ci importa? È sorprendente per l'OP (e per me). Dov'è il danno nel cercare di imparare cose nuove? ;) – jalf
Sto cercando di unire modelli di oggetti tra binari e binari di Visual Studio. In realtà è un problema :). La cosa strana è che sia GCC che Visual Studio dispongono entrambi di oggetti come questo, mentre llvm no. – Mason