gpt4 book ai didi

c++ - 为程序全局设置 Linux 上的默认堆栈大小

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:32:39 33 4
gpt4 key购买 nike

所以我注意到 Linux 上线程的默认堆栈大小是 8MB(如果我错了,请纠正我),顺便说一句,Windows 上是 1MB。这对我的应用程序来说非常糟糕,因为在 4 核处理器上,这意味着 64 MB 空间仅用于线程!最糟糕的是,我从来没有为每个线程使用超过 100kb 的堆栈(我经常滥用堆 ;))。

我现在的解决方案是限制线程的堆栈大小。但是,我不知道如何便携地执行此操作。只是为了上下文,我使用 Boost.Thread 来满足我的线程需求。我可以接受一点 #ifdef hell ,但我想先知道如何轻松地做到这一点。

基本上,我想要这样的东西(其中 windows_* 在 windows 版本上链接,而 posix_* 在 linux 版本下链接)

// windows_stack_limiter.c
int limit_stack_size()
{
// Windows impl.
return 0;
}

// posix_stack_limiter.c
int limit_stack_size()
{
// Linux impl.
return 0;
}

// stack_limiter.cpp
int limit_stack_size();
static volatile int placeholder = limit_stack_size();

如何充实这些功能?或者,我是不是完全错了?请记住,我无法控制实际的线程创建(在 Windows 上没有新的 CreateThread 参数),因为我正在使用 Boost.Thread。

最佳答案

您不需要这样做。机器的物理内存仅在请求页面错误系统需要的地方使用。即使线程堆栈比您使用的数量大得多,额外的大小也位于虚拟地址空间中,不会占用物理 RAM。

如果物理 RAM 以这种速度占用,典型的机器将在只有几十个进程运行时耗尽内存。你可以从 ps -Al 中看到,并发执行的数量远不止于此。

关于c++ - 为程序全局设置 Linux 上的默认堆栈大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3058101/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com