Seiten

Donnerstag, 7. Februar 2013

Größerer Stack für die eigenen Programme

Eigentlich sollte es nicht notwendig sein, aber wenn das eigene Programm - sei es nur zu Testzwecken - einmal mehr Stack benötigt, dann lässt sich das unter Linux leicht bewerkstelligen:



 1 #include <sys/resource.h>
 2 
 3   // ...
 4   const rlim_t stackSize = 12 * 1024 * 1024; // 12MiB
 5   struct rlimit rl;
 6   int result;
 7   result = getrlimit(RLIMIT_STACK, &rl);
 8   if (result == 0)
 9   {
10     if (rl.rlim_cur < stackSize)
11     {
12       rl.rlim_cur = stackSize;
13       result = setrlimit(RLIMIT_STACK, &rl);
14       if (result != 0)
15       {
16         fprintf(stderr, "Error setting stack size = %d\n", result);
17       }
18     }
19   }
20   // ...

Der obige Code fragt mittels getrlimit zunächst die aktuelle (maximale) Stackgöße ab, überprüft dann, ob ein weiteres Erhöhen mit setrlimit nötig ist. 

Falls das Erhöhen erfolgreich ist, gibt setrlimit 0 zurück.

Mehr (interessante) Limits lassen sich durch diese Vorgehensweise setzen, siehe hier.

Für Windows PE Dateien muss die Stackgröße fest in das Programm kompiliert werden. Dazu gibt es entsprechende Compilerswitches.

Keine Kommentare:

Kommentar veröffentlichen