Итак, я заметил, что размер стека по умолчанию для потоков в linux составляет 8 МБ (если я ошибаюсь, ПОЖАЛУЙСТА, поправьте меня), и, кстати, 1 МБ в Windows.Это довольно плохо для моего приложения, так как на 4-ядерном процессоре это означает, что 64 МБ места используется просто для потоков!Хуже всего то, что я никогда не использую более 100 Кбайт стека на поток (я злоупотребляю кучей LOT;)).
Мое решение сейчас - ограничить размер стека потоков.Тем не менее, я понятия не имею, как это сделать переносимо.Просто для контекста, я использую 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();
Как мне реализовать эти функции?Или, наоборот, я делаю это совершенно неправильно?Помните, что я не могу контролировать фактическое создание потока (нет новых параметров для CreateThread в Windows), так как я использую Boost.Thread.