Как увеличить размер стека, доступного для библиотеки Rust?
Я играю с лямбда-исчислением и хотел бы иметь немного больше стекового пространства, чтобы иметь возможность строить и вычислять (очень) длинные цепочки функций. Есть ли способ увеличить его для ящика, аналогично увеличению предела рекурсии (#![recursion_limit = "100"]
)?
Ящик - это библиотека, и я хотел бы, чтобы она могла выполнять операции с интенсивным стеком независимо от целевой операционной системы.
2 ответа
После некоторых исследований я пришел к выводу, что не существует универсального способа добиться того, чего я добиваюсь, но используя std::thread::Builder
Мне удалось создать дополнительный поток с указанным размером стека и выполнять внутри него тяжелые операции:
fn huge_reduction() {
let builder = thread::Builder::new()
.name("reductor".into())
.stack_size(32 * 1024 * 1024); // 32MB of stack space
let handler = builder.spawn(|| {
// stack-intensive operations
}).unwrap();
handler.join().unwrap();
}
Это не функция языка, это функция операционной системы. В системах *nix вы будете использовать такой инструмент, как ulimit
, Другие системы, вероятно, используют другие инструменты: