При создании статического массива, например, размером [[f64;3];125000] компилятор выдавал переполнение стек памяти. Обновил rustup и теперь такой проблемы нет. Какова теперь память стека, и вообще какие изменения претерпели примитивы массивов?
Размер стека не зависит от языка программирования и версии компилятора, это свойство операционной системы.
Мне неизвестны изменения поведения для статических массивов в последних версиях компилятора, я думаю ничего не менялось, они по прежнему аллоцируются на стеке.
Тестируя на своей машине, переполение стека предсказуемо происходит между [[0.0; 10]; 100500]
и [[0.0; 11]; 100500]
, т.е. между 8,040,000 и 8,844,000 байтами. Стандартный размер стека на Mac и Linux обычно равен 8 Мб, посмотреть его можно с помощью ulimit -s
:
❯ ulimit -s
8176
В общем с моей стороны никаких изменений в языке нет, если вам известны какие-то две конкретные версии компилятора, у которых поведение отличается – предоставьте инструкции для воспроизведения.
Здравствуйте, спасибо за ответ!
Я не могу Вам предоставить информацию о компиляторах конкретно, потому что rust я поставил давно, и не парился по поводу статических массивов (именно примитивы раст, без библиотек и т.д.). Но потом мне необходимо было создать массив такого размера [[f64;3];125000] и компилятор выдавал переполнение стека. Я обновил rust update буквально на днях и обнаружил, что теперь данный массив не вызывает переполнение стека. Это всё разумеется на одной машине с той же операционной системе. Поэтому я и подумал, каковы могли быть изменения в rust и где про их можно прочесть.