Anzeige:
Ergebnis 1 bis 5 von 5

Thema: Default Stack-Größe?

  1. #1
    Registrierter Benutzer
    Registriert seit
    17.09.2001
    Beiträge
    1.182

    Default Stack-Größe?

    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 16:13 Uhr)

  2. #2
    Registrierter Benutzer Avatar von Boron
    Registriert seit
    07.01.2002
    Beiträge
    827
    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:
    Code:
    #include <iostream>
    int main()
    {
       unsigned char stackField[1024][1009];
       std::cin.get();
       return 0;
    }
    Zu Linux finde ich irgendwie gar nichts .

    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)

  3. #3
    Registrierter Benutzer
    Registriert seit
    17.09.2001
    Beiträge
    1.182
    Warum nicht auf dem Heap? Was spricht dagegen? Dass man den Speicher selbst wieder freigeben muss (free, delete) kann als Argument nicht zählen.
    Doch schon, der code ist sehr performance-kritisch ... ausserdem hat der stack eine unglaublich gute cache-lokalität
    Geändert von Lin728 (21-08-2017 um 16:14 Uhr)

  4. #4
    Registrierter Benutzer Avatar von jeebee
    Registriert seit
    01.01.2005
    Ort
    Bern || Zürich
    Beiträge
    540
    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
    my very own 128 bit integer
    C4 D3 B8 A8 9E A0 C6 EC 7D EC A8 15 28 D1 92 58
    more information

  5. #5
    Registrierter Benutzer
    Registriert seit
    17.09.2001
    Beiträge
    1.182
    Allerdings bringt dir das nix wenns um cache-lokalität geht und du weniger als 8MB cache hast!
    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.
    Aber wohl wichtiger für mich ist, dass ich mir ein malloc/free spare.

    Danke vielmals
    Geändert von Lin728 (21-08-2017 um 16:14 Uhr)

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •