Как установить ограничение стека 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?

0 ответов

Другие вопросы по тегам