首頁 >後端開發 >C++ >如何更改 Linux 中 C 應用程式的堆疊大小?

如何更改 Linux 中 C 應用程式的堆疊大小?

Susan Sarandon
Susan Sarandon原創
2024-12-24 20:03:22993瀏覽

How Can I Change the Stack Size for C   Applications in Linux?

使用GNU 編譯器更改Linux 中C 應用程式的堆疊大小

在C 中,可以在編譯期間調整堆疊大小,以滿足特定應用程式的特定內存要求。雖然 LD_FLAGS 選項在具有 g 的 macOS 中運作良好,但 Linux 發行版(例如 SUSE Linux)使用不同的方法。

要在Linux 中使用GCC 增加單一應用程式的堆疊大小,通常採用兩種主要方法:

ulimit -s 指令

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn