Im Gegensatz zu macOS, wo LD_FLAGS verwendet werden kann, um die Stapelgröße während der C-Kompilierung mit g anzugeben , Linux-Distributionen wie SUSE Linux zeigen Fehler an, wenn sie auf einen solchen Befehl stoßen. Dieses Problem entsteht aufgrund der Nichtverfügbarkeit der Option --stack im Linux-Linker.
Um dieses Hindernis zu umgehen, besteht ein alternativer Ansatz darin, die Stapelgröße programmgesteuert innerhalb der Anwendung selbst festzulegen. Mithilfe der Setrlimit-Funktion können Entwickler die Stapelgröße nach dem Kompilieren der Anwendung ändern. Hier ist ein veranschaulichender Codeausschnitt:
#include <sys/resource.h> int main (int argc, char **argv) { const rlim_t kStackSize = 16 * 1024 * 1024; // min stack size = 16 MB struct rlimit rl; int result; result = getrlimit(RLIMIT_STACK, &rl); if (result == 0) { if (rl.rlim_cur < kStackSize) { rl.rlim_cur = kStackSize; result = setrlimit(RLIMIT_STACK, &rl); if (result != 0) { fprintf(stderr, "setrlimit returned result = %d\n", result); } } } // ... return 0; }
Bitte beachten Sie, dass bei der Verwendung dieser Methode die Deklaration großer lokaler Variablen innerhalb der main()-Funktion vermieden werden muss, da dies zu einem Stapelüberlauf führen könnte, bevor die Anpassung der Stapelgröße ausgeführt wird. Definieren Sie diese Variablen stattdessen in Funktionen, die von main() aufgerufen werden, sobald die Stapelgröße erfolgreich geändert wurde.
Das obige ist der detaillierte Inhalt vonWie ändere ich die Größe des C-Anwendungsstapels unter Linux während der Kompilierung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!