所以我注意到
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();
我如何充实这些功能?或者,或者,我只是完全错了吗?记住我无法控制实际的线程创建(在Windows上没有新的paraT到CreateThread),因为我正在使用Boost.Thread.