Es gibt eine einfache C++ KlasseMit sizeof für Klassen
class LASet
{
public:
long int maxValue, minValue;
int _count;
set <long int> _mySet;
LASet()
{
maxValue = 0;
_count = 0;
minValue =std::numeric_limits<long int>::max();
_mySet.clear();
}
void Add(long int value)
{
if (_mySet.find(value) != _mySet.end())
return;
if (value > maxValue)
maxValue = value;
if (value < minValue)
minValue = value;
_mySet.insert(value);
_count++;
}
// some helper functions....
};
Als ich einige Objekte dieser Klasse instanziiert, ich will ihre Größe während der Laufzeit finden. Also, ich schrieb einfach die sizeof
nach vielen Zyklen der Ausführung für jedes Objekt. Zum Beispiel:
LASet LBAStartSet;
...
...
cout << "sizeof LBAStartSet = " << sizeof(LBAStartSet) << '\n';
Der cout
Linie Berichte nur 72
für alle Objekte bedeuten, 72B, aber top
Befehl zeigt 15GB Speicher.
Ich habe das Handbuch unter cppreference gelesen, dass sizeof
bei einigen unvollständigen Datentypen nicht funktioniert. Ist mein Datentyp unvollständig?
Jede Rückmeldung wird geschätzt.
'sizeof' tut nicht, was Sie denken, dass es tut ... lesen Sie diese Handbuchseite. Ihr Typ ist nicht unvollständig –
Denken Sie daran, dass 'sizeof' zur Kompilierungszeit aufgelöst wird. –
sizeof() ist ein Kompilierzeitoperator. Dein Typ ist vollständig. Wie ich aus deinem Code ersehen kannst, hast du "set" benutzt und wenn ich nicht falsch liege, fügst du zur Laufzeit Daten zu diesem Set hinzu. Sizeof() wird Ihre Größe nicht zur Laufzeit zurückgeben, sondern gibt die Größe Ihrer Klasse an, indem die Datenmembertypen zur Kompilierzeit berechnet werden. top zeigt Ihnen die tatsächliche Laufzeitspeicherauslastung (residenter Speicher). – sagar