2009-05-05 9 views
4

Ich habe eine Arraylist von Elementen, die nur vielleicht zehn Variablen enthalten. Aber die Artikel haben ein gutes Stück Code, und ich möchte mehr hinzufügen. Ich bin gespannt, wie sich das auf die Größe meiner Struktur auswirkt. Meine Intuition sagt mir, dass jeder einen Stapel hat, aber mit Argumenten, die herumgereicht werden und Sachen, die ich wahrscheinlich nicht in Betracht gezogen habe, bin ich unsicher. Also ungefähr wie viel ist Code zu meiner Datenstruktur hinzuzufügen?Erhöht die Menge an Code eine Datenstruktur?

Antwort

10

Code addiert sich nicht zur Größe Ihrer Struktur.

3

Der einer Klasse zugeordnete Code wird in der Regel nicht pro Instanz dupliziert, daher sollte das Hinzufügen von Code nicht die Größe Ihrer Arraylist beeinflussen.

3

Obwohl Sie Code in den gleichen Satz geschweifter Klammern als Daten einfügen, wird der Compiler ihn trennen und in einen anderen Speicherabschnitt einfügen.

Auf diese Weise brauchen Sie nur eine Kopie des Codes - es ist nicht notwendig, eine neue Kopie für jedes Element zu erstellen, das es verwendet.

Nur in sehr großen Projekten wird die tatsächliche Größe des kompilierten Codes ein Problem; normalerweise ist es nicht viel größer als der Ausgangstext. Bei kleinen Programmen sind es in der Regel einige hundert K oder höchstens ein oder zwei Megabyte. Es lohnt sich nicht, sich über moderne Maschinen Gedanken zu machen.

+0

Eigentlich ist der kompilierte Code in der Regel erheblich kleiner als die Quelldarstellung. –

+0

Jetzt, wo ich darüber nachdenke, hast du definitiv Recht, wenn es um C# geht. Ich bin eher an C++ gewöhnt, wo ein verirrter "Cout" am Ende mit einer erstaunlichen Menge Code kompiliert und verlinkt werden kann. – Charlie

1

Code wird nicht auf dem Heap gespeichert.

Unabhängig davon, wie viele Objekte Sie erstellen, haben Sie nur den Code an einem Ort.

1

Die Klassenmitgliedsfunktionen, auf denen Objekt funktioniert, werden unterschiedlich gespeichert und es hat keine Auswirkung auf Größe des Objekts. Wobei Datenelemente innerhalb der Klasse Teil des Objekts sind und die Objektgröße sich ändert, wenn Sie den Typ der Variablen ändern.

ex:

class Test 
{ 
    1. member functions 

    //it does not matter how many functions you have, this section does not contribute 
    // to object size 

    2. member variables 
    //this contributes to the object size, define an int or double etc will change the object size 
} 
1

Jedes Objekt verfügt nicht über einen eigenen Stapel. Stacks sind pro Thread/Prozess, nicht pro Objekt.

2

Die Größe einer Objektinstanz ist (meistens) die Summe ihrer Datenelemente. Funktionsmember werden nicht pro Instanz gespeichert und haben keine Auswirkungen auf die Instanzgröße.

Ihr Programm hat einen einzelnen Stapel pro Thread. Wenn eine Funktion aufgerufen wird, ist der Stapelspeicher für jeden Parameter und jede Variable dieser Funktion reserviert und wird bei der Rückgabe freigegeben.

Ihr Objekt wird auf dem Stapel gespeichert, wenn es in einer Funktion ohne Neuinstanz instanziiert wird. Wenn Sie new verwenden, wird nur eine Referenz auf dem Stapel gespeichert und die Instanz selbst wird auf dem Heap gespeichert.

:)

Verwandte Themen