В поле * nix используйте getrlimit
:
RLIMIT_STACK
The maximum size of the process stack, in bytes. Upon
reaching this limit, a SIGSEGV signal is generated. To handle
this signal, a process must employ an alternate signal stack
(sigaltstack(2)).
В Windows используйте VirtualQuery
:
Для первого вызова передайте ему адрес любого значения в стеке, чтобы получить базовый адрес и размер в байтах зарезервированного пространства стека. На машине x86, где стек растет вниз, вычитайте размер с базового адреса и VirtualQuery еще раз: это даст вам размер пространства, зарезервированного для стека (если вы не точно на пределе размера стека в то время ). Суммирование двух естественно дает вам общий размер стека.
Нет никакого независимого от платформы метода, поскольку размер стека остается логической реализации и хост-системы - на встроенном мини-SOC есть меньше ресурсов для распространения, чем на 128 ГБ оперативной памяти. Однако вы можете влиять на размер стека определенного потока на всех ОС, а также на вызовы, специфичные для API.
Чтобы поддерживать многозначные значения стиля PHP / массива, вы можете просто указать, что имя ключа будет тем, что вы хотите, то есть
query: {
'models[]': this.selectedModels.map(e => e.value)
}
Это может появиться как
?model%5B%5D=MODEL1&model%5B%5D=MODEL2...
, но это нормально (это просто кодировка URL), и ваш обработчик запросов на стороне сервера должен правильно декодировать его.