在C 中,可以在編譯期間調整堆疊大小,以滿足特定應用程式的特定內存要求。雖然 LD_FLAGS 選項在具有 g 的 macOS 中運作良好,但 Linux 發行版(例如 SUSE Linux)使用不同的方法。
要在Linux 中使用GCC 增加單一應用程式的堆疊大小,通常採用兩種主要方法:
ulimit -s 指令可用於設定特定使用者或進程的堆疊大小限制。但是,此方法需要提升權限,並且必須在啟動應用程式之前執行。例如:
ulimit -s unlimited
或者,可以使用 setrlimit 在應用程式程式碼中以程式設定堆疊大小。此方法更加可移植,並允許應用程式在運行時動態調整其堆疊大小。以下程式碼片段示範如何將堆疊大小增加到16 MB:
#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; }
請注意,即使使用此方法,也要避免在main() 中聲明大型局部變量,因為之前可能會發生堆疊溢位堆疊大小調整生效。
以上是如何更改 Linux 中 C 應用程式的堆疊大小?的詳細內容。更多資訊請關注PHP中文網其他相關文章!