Как установить ограничение стека V8 для Windows на разумное значение
Я использую встроенную версию движка V8 Javascript (версия 5.8). Окружающему приложению C++ иногда требуется больший объем стека (опция --stack
gcc linker). Итак, если я создаю новый изолятор V8, я использую следующий код, чтобы установить текущий предел стека выполнения Javascript:
MEMORY_BASIC_INFORMATION infoBuffer;
VirtualQuery(&infoBuffer, &infoBuffer, sizeof(infoBuffer));
uint32_t *base =
(uint32_t *)infoBuffer.AllocationBase
+ 100 * 1024 / sizeof(uint32_t);
Isolate::CreateParams create_params;
create_params.array_buffer_allocator =
v8::ArrayBuffer::Allocator::NewDefaultAllocator();
create_params.constraints.set_stack_limit(base);
defaultIsolate = Isolate::New(create_params);
Моя проблема: это не работает, если я использую напрямую infoBuffer.AllocationBase
в качестве основы стека V8, и я не знаю, почему он не работает. Чтобы избежать этого, я добавляю немного места сверху (100 КБ). Кажется, это работает, но я не уверен, всегда ли это работает.
Мой вопрос: есть ли лучшее решение для определения максимально возможного указателя стека в Windows? Любая последовательность, сколько памяти я должен добавить к infoBuffer.AllocationBase
?