Hallo,
Ich schreib gerade wieder einmal ein bisschen C und würde wenn möglich einen puffer (so ~50-100kb) am stack statt am heap anlegen.
Wie groß ist denn der Stack "normalerweise", mit welchen Richtwerten kann man rechnen?
Hallo,
Ich schreib gerade wieder einmal ein bisschen C und würde wenn möglich einen puffer (so ~50-100kb) am stack statt am heap anlegen.
Wie groß ist denn der Stack "normalerweise", mit welchen Richtwerten kann man rechnen?
Geändert von Lin728 (21-08-2017 um 15:13 Uhr)
Unter Windows ist der Stack für ein Programm standardmäßig 1MB groß, habe ich grad mehrfach gelesen. Das kommt auch ungefähr hin. Folgendes Programm stürzt ab, wenn ich auf [1024][1010] gehe (VSC++ 2005), mit 1009 läuft es noch:Zu Linux finde ich irgendwie gar nichts .Code:#include <iostream> int main() { unsigned char stackField[1024][1009]; std::cin.get(); return 0; }
Warum nicht auf dem Heap? Was spricht dagegen? Dass man den Speicher selbst wieder freigeben muss (free, delete) kann als Argument nicht zählen .
Gruß Boron (der sich oft wegen mieser Rechtschreibung anderer die Augen reiben muss)
LINUX IS LIKE AN INDIAN TENT: NO GATES, NO WINDOWS AND AN APACHE INSIDE!
Hardware Monitoring unter Linux -> http://santafu.sourceforge.net (Temperaturen, Lüfterdrehzahlen und Spannungen)
Doch schon, der code ist sehr performance-kritisch ... ausserdem hat der stack eine unglaublich gute cache-lokalitätWarum nicht auf dem Heap? Was spricht dagegen? Dass man den Speicher selbst wieder freigeben muss (free, delete) kann als Argument nicht zählen.
Geändert von Lin728 (21-08-2017 um 15:14 Uhr)
Linux: mittels ulimit kannst du die stack-Grösse anzeigen resp. einstellen. Bei mir ist sie standardmässig auf 8MB (zum Anzeigen ulimit -a - für alle einstellbaren Grössen). Allerdings bringt dir das nix wenns um cache-lokalität geht und du weniger als 8MB cache hast! Abgesehen davon muss wohl auch nicht der ganze Stack im Cache bleiben, wenn du z.B. mit grossen Matrizen im Heap rechnest.
HTH jeebee
Sicher, der Stack verläuft ja linear und die Lokalität am Stack ist extrem hoch, muss also gar nicht als ganzes in den cache passen.Allerdings bringt dir das nix wenns um cache-lokalität geht und du weniger als 8MB cache hast!
Aber wohl wichtiger für mich ist, dass ich mir ein malloc/free spare.
Danke vielmals
Geändert von Lin728 (21-08-2017 um 15:14 Uhr)
Lesezeichen