Estoy tratando de determinar el tamaño de un objeto en tiempo de ejecución. sizeof no funciona porque devuelve el tamaño en tiempo de compilación. Aquí está un ejemplo de lo que quiero decir:Cómo determinar la memoria de un objeto C++ en tiempo de ejecución
class Foo
{
public:
Foo()
{
c = new char[1024*1024*1024];
}
~Foo()
{
delete[] c;
}
private:
char *c;
};
En este caso, sizeof(Foo)
será de 4 bytes y no ~ 1 GB. ¿Cómo puedo determinar el tamaño de Foo en tiempo de ejecución? Gracias por adelantado.
posible duplicado de [Si free() conoce la longitud de mi matriz, ¿por qué no puedo solicitarla en mi propio código?] (Http://stackoverflow.com/questions/2650895/if-free-knows -the-length-of-my-array-why-cant-i-ask-it-it-in-my-own-code) –
Es posible que desee distinguir el tamaño del objeto de la cantidad de memoria controlada por el objeto. La asignación que está configurando 'c' para señalar * nunca * será parte del objeto en sí. Los objetos de la clase 'Foo' serán todos del mismo tamaño (que será del tamaño de un puntero de datos en el ejemplo anterior). Esto es un poco pedante, pero ... – dmckee
'sizeof no funciona porque esto devuelve el tamaño en tiempo de compilación. - en realidad no. A veces hay un tamaño de tiempo de ejecución, especialmente en C99 y GCC. (http://stackoverflow.com/questions/2615203/is-sizeof-in-c-evaluated-at-compilation-time-or-run-time/2709634#2709634) – osgx