Stapelzuordnung in C

8

Ist es ein schlechter Stil, Ihre einfachen C-Programme so zu gestalten, dass sie alles oder fast alles auf dem Stapel verteilen?

    
JT. 14.03.2010, 08:26
quelle

5 Antworten

16

Es ist ein schlechter Stil, die Heap-Zuweisung zu verwenden, wenn Sie sie nicht wirklich brauchen. Vor allem in einfachen Programmen.

    
Pavel Shved 14.03.2010 08:32
quelle
3

Stapelzuweisungen sind billiger als Heapzuweisungen. Zuteilung und Freigabe von Stapel sind nur einfache Zählerinkremente und dekrementiert auf Funktion (oder genauer: Bereich) -Eintritt / -Ausgang. Heap-Zuordnungen bedeuten, einen ausreichend großen Speicherblock in einem möglicherweise fragmentierten Adressraum zu finden. Aus diesem Grund sind Stapelzuweisungen fast immer vorzuziehen.

Die Hauptgründe dafür, den Stapel nicht zu verwenden, sind:

  • Die benötigte Größe ist bis zur Laufzeit nicht bekannt.
  • Es wird viel Speicher (Megabyte) benötigt; Dies kann zu Problemen auf Systemen führen, bei denen die Stackgrößen normalerweise auf zweistellige Megabyte-Zahlen begrenzt sind.
Anders Abel 14.03.2010 08:37
quelle
1

Wenn wir uns, wie Sie sagten, auf SIMPLE Programme konzentrieren, dann ist es nicht so schlimm :) Sie können sich auch C99 Arrays mit variabler Länge ansehen (hier ein einfaches Beispiel: Ссылка ).

    
Roman Dmitrienko 14.03.2010 08:33
quelle
1

Der Hauptvorteil des Heapspeichers besteht darin, dass Sie ihn dynamisch zuordnen können. Wenn Sie die Größe der benötigten Variable nicht kennen: Heap it.

Wenn Ihr Programm einfach ist, müssen Sie möglicherweise keine Variable auf dem Heap zuweisen; aber die Wahl hängt nicht von der Komplexität des Programms ab, es hängt von der Notwendigkeit ab, die Sie von der Variable haben. Wenn Sie die Variable während des gesamten Arbeitsablaufs über mehrere Funktionen aufrufen / ändern müssen, ist es auf dem Heap besser. Du wirst es befreien, wenn du es nicht mehr brauchst. Wenn die Variable nur eine Optionsstruktur oder ein Zähler ist, ist der Stack dafür perfekt.

    
Opera 14.03.2010 08:38
quelle
0

Nein. Es sei denn, Sie haben Variablen mit einer nicht festen Größe. Ein solcher Code könnte einen Stack-Überlauf ziemlich schnell verursachen.

    
Georg Schölly 14.03.2010 08:35
quelle

Tags und Links