Die Größe von C++ - Klassen
Hier ist der code, der die Drucke Größe der verschiedenen Klassen
#include <iostream>
using namespace std;
class EmptyClass
{
};
class AbstractClass
{
public:
virtual void funcOne() = 0;
virtual void funcTwo() = 0;
};
class NotAbstrClass
{
public: int virtFunc( int );
};
class MixClass
{
public:
virtual void clFunc( int );
static int i;
int j;
};
int main()
{
//Print size of class or class objects
cout<<"Size of empty class: "<< sizeof(EmptyClass)<<endl;
cout<<"Size of Abstract class :"<< sizeof(AbstractClass)<<endl;
cout<<"Size of Non Abstract class: "<< sizeof(NotAbstrClass)<<endl;
cout<<"Size of Mix class: "<< sizeof(MixClass)<<endl;
return 0;
}
Die Ausgabe des Programms auf C++11 compiler ist
Size of empty class: 1
Size of Abstract class :4
Size of Non Abstract class: 1
Size of Mix class: 8
Verstehe ich, warum die Leere Klasse hat die Größe 1 Größe der leere Klasse object. Für die abstrakte Klasse, die das Objekt speichert einen Zeiger für die Implementierung von virtuellen Funktionsaufruf-Mechanismen. Aber was ist mit den Größen der anderen Klasse von Objekten (NotAbstrClass und MixClass) ?
Verstehen, dass alles, was sizeof() sagt, Sie ist von Natur aus abhängig, insbesondere compiler, das Betriebssystem und insbesondere die Einstellungen.
Sie sind richtig über es. Aber für den Augenblick denken, dass ich ein 32-bit-desktop-Prozessor-Architektur mit einem 32-bit OS. In einem solchen Fall können Sie konkrete Werte für die Größe von integer-Typen (4 Byte) und der Typ Zeiger(4 byte).
Duplikat von stackoverflow.com/questions/4766323/...
Ich weiß das ist eine dumme Frage und ich dachte das gleiche, als ich gefragt wurde, diese Art von Fragen in einem interview mit einem Halbleiter-Unternehmen.
Sie sind richtig über es. Aber für den Augenblick denken, dass ich ein 32-bit-desktop-Prozessor-Architektur mit einem 32-bit OS. In einem solchen Fall können Sie konkrete Werte für die Größe von integer-Typen (4 Byte) und der Typ Zeiger(4 byte).
Duplikat von stackoverflow.com/questions/4766323/...
Ich weiß das ist eine dumme Frage und ich dachte das gleiche, als ich gefragt wurde, diese Art von Fragen in einem interview mit einem Halbleiter-Unternehmen.
InformationsquelleAutor nurabha | 2013-06-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Laut Girish Shetty:
Hier gibt es einige Verwandte website, ich denke, es kann nützlich sein für Sie.
Bestimmen Sie die Größe der Klasse object: http://www.cprogramming.com/tutorial/size_of_class_object.html
Memory layout: http://www.phpcompiler.org/articles/virtualinheritance.html
Und, wenn Sie MVSC, können Sie die dump-memory-layout für alle Klasse, in der Sie Ihre Lösung mit
-d1reportAllClassLayout
so:Girish Shetty ist der Autor des ersten Papier-link, den ich siehe oben. So, ich gebe seinen Namen für die Referenz. 🙂
oh. Okay. Danke!
InformationsquelleAutor HappyTran
NotAbstrClass
hat keine Mitglieder-Daten, so dass es auch ist eine leere Klasse. Da der Unterricht nicht Größe null, Sie bekommen die gleiche Behandlung wieEmptyClass
.MixClass
hat eine virtuelle Funktion, und 1 nicht-statischen Daten-member. Es scheint, jedes von diesen (vptr
undint
) belegen 4 bytes auf Ihrer Plattform, so dass die Größe ist 8 bytes.Sie beantwortet es selbst. Die statischen Daten-member ist geteilt zwischen allen Instanzen dieser Klasse, und als solche gehört Sie nicht zu jeder einzelnen Instanz. Wenn es nicht Teil einer Instanz, wie können Sie es hinzufügen, um die Größe von einer?
InformationsquelleAutor Praetorian
NotAbstrClass ist wie eine leere Klasse, wenn wir sprechen über die bit-Größen da es keine Daten.
MixClass hat die virtual function pointer (4 Byte auf einem 32-bit-Maschine) und ein int (4 Byte).
InformationsquelleAutor Marius