tengo una clase simple en C++ que tiene un entero y una vtable:objeto MSVC Disposición Quirk
class Something {
virtual void sampleVirtualMethod();
int someInteger;
};
Si nos fijamos en el diseño de objetos para MSVC (utilizando el/d1reportSingleClassLayout) se obtiene:
class Something size(8):
+---
0 | {vfptr}
4 | someInteger
+---
Lo cual tiene mucho sentido. 4 bytes para el puntero vtable y 4 bytes para el entero. Lo extraño es cuando agrego un doble a la clase:
class Something {
virtual void sampleVirtualMethod();
int someInteger;
**double someDouble;**
};
recibí este diseño de objetos:
class Something size(24):
+---
0 | {vfptr}
8 | someInteger
| <alignment member> (size=4)
16 | someDouble
+---
¿Por qué es la diferencia entre el 0 y el desplazamiento someInteger 8 en lugar de 4? ¿El vtable creció a 8 bytes de alguna manera? No importa el orden de cuando agregue un doble, esto sucede.
Gracias.
No puedo evitar preguntarme por qué le interesaría esto. ¿Esto está causando un problema directo a lo que estás trabajando? –
¿Por qué * no * le importa? Es sorprendente para el OP (y para mí). ¿Dónde está el daño al tratar de aprender cosas nuevas? ;) – jalf
Estoy intentando fusionar modelos de objetos entre binarios y binarios de Visual Studio. En realidad es un problema :). Lo extraño es que tanto GCC como Visual Studio diseñan objetos como este mientras que llvm no. – Mason