Stack Größe?
-
Hallo,
ich fürchte ich habe die Funktionsweise eines Stacks mit mehreren Funktionen noch nicht ganz verstanden. Wenn ich also in der main ein Array mit z.B. 100kByte erzeuge durch ein
byte stack[100000];dann sollte der (standard) Stack von 512kByte zu einem fünftel belegt sein.
Wenn ich nun in anderen Funktionen ebenso diesen Stack belege, dann müsste der Stack nach 5 weiteren Funktionen zu gross werden -> das Program stürzt gleich nach dem Aufruf ab. Dabei ist es nicht erforderlich, das diese Funktion aufgerufen wird damit das Program abstürzt.Stimmt dies so?
Wie sieht dies bei geladenen DLL Dateien aus, haben diese einen eigenen Stack?Grüße
TheNoName
-
Dabei ist es nicht erforderlich, das diese Funktion aufgerufen wird damit er abstürzt.
Nein, erst wenn die Funktion aufgerufen wird, die den Stack "voll macht". Auch muss es nicht abstuerzen, das Verhalten ist eher undefiniert.
-
thenoname schrieb:
Dabei ist es nicht erforderlich, das diese Funktion aufgerufen wird damit das Program abstürzt.
Doch, ist es. Eine Funktion belegt immer nur dann Speicher auf dem Stack, wenn sie gerade am Aufrufstapel beteiligt ist.
thenoname schrieb:
Wie sieht dies bei geladenen DLL Dateien aus, haben diese einen eigenen Stack?
Nein, jeder Thread hat einen eigenen Stack.
-
Nein, jeder Thread hat einen eigenen Stack.
d.h. wenn Microsoft eine DLL liefert, deren Funktion 510kByte vom Stack frisst, dann hat mein Hauptprogram, das die DLL Funktion aufruft nur noch 2kByte Stack?
Man kennt deren Code ja nicht

-
thenoname schrieb:
d.h. wenn Microsoft eine DLL liefert, deren Funktion 510kByte vom Stack frisst, dann hat mein Hauptprogram, das die DLL Funktion aufruft nur noch 2kByte Stack?
Ja. Du kannst aber davon ausgehen, dass niemand, der sein Handwerk versteht, solche Funktionen ausliefert. So große Speicherblöcke werden vom Heap/Free Store geholt.
-
Wenn du wirklich mal so eine Schrott-DLL hast und nicht ausweichen kannst, gibt es ja immer noch die Möglichkeit, die Stackgröße anzupassen.
-
Nee, natürlich mach Microsoft sowas nicht.
Vielmehr schreibe ich eine Plugin DLL und möchte nicht das Hauptprogram beeinflussen. Also wird wohl grundsätzlich davon abgeraten den Stack übermäßig zu verwenden, denn das Hauptprogram benötigt ihn ja ebenso?
Ich hatte vermutet, das eine DLL für jeden attached Thread einen eigenen Stack aufbaut.Grüße
TheNoName
-
Ist das shared Memory einer DLL auch im Stack untergebracht?
-
thenoname schrieb:
Ist das shared Memory einer DLL auch im Stack untergebracht?
Nein. Stack und DLL hat erst einmal nichts miteinander zu tun. Auf dem Stack werden automatische Variablen und ggf. Funktionsparameter abgelegt. Jeder Thread hat einen Stack. Egal, ob der gerade in eine DLL ruft oder nicht.