Cla*_*bel 4 c c++ multithreading cross-platform
所以我注意到linux上线程的默认堆栈大小是8MB(如果我错了,请纠正我),顺便说一句,Windows上的1MB.这对我的应用来说非常糟糕,因为在4核处理器上意味着64 MB空间仅用于线程!最糟糕的是,我每个线程永远不会使用超过100kb的堆栈(我滥用堆很多;)).
我现在的解决方案是限制线程的堆栈大小.但是,我不知道如何移植.只是为了上下文,我正在使用Boost.Thread来满足我的线程需求.我很喜欢#ifdef地狱,但我想知道如何轻松地做到这一点.
基本上,我想要这样的东西(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();
Run Code Online (Sandbox Code Playgroud)
我如何充实这些功能?或者,或者,我只是完全错了吗?记住我无法控制实际的线程创建(在Windows上没有新的paraT到CreateThread),因为我正在使用Boost.Thread.
你不需要这样做.机器的物理内存仅在需求页面故障系统需要时才使用.即使线程堆栈明显大于您使用的数量,额外的大小也在虚拟地址空间中,并且不会占用物理RAM.
如果物理RAM以这种速率捆绑,一台典型的机器就会耗尽内存,只运行几十个进程.你可以从中看到ps -Al比同时执行更多的东西.
| 归档时间: |
|
| 查看次数: |
4863 次 |
| 最近记录: |