Из любопытства я играл с переполнением стека с помощью этого кода:
fn main() {
let my_array: [i32; 3000000000] = [3; 3000000000];
println!("{}", my_array[0]);
}
И к моему удивлению, я закончил три разных результата:
1) Это то, что я ожидал:
thread '<main>' has overflowed its stack
Illegal instruction (core dumped)
2) Неожиданно неопределенно:
Illegal instruction (core dumped)
3) Полностью озадачивает:
208333333
Чтобы показать стохастический характер, мне пришлось перезапустить оболочку, в противном случае результаты были детерминированными (я получал бы одно и то же сообщение об ошибке снова и снова).
Я скомпилировал только:
rustc my_file.rs
и вызывается с помощью:
./my_file
Моя версия rustc:
rustc 1.0.0 (a59de37e9 2015-05-13) (built 2015-05-14)
Моя версия ubuntu:
Distributor ID: Ubuntu
Description: Ubuntu 14.04 LTS
Release: 14.04
Codename: trusty
Также размер массива, который я пытаюсь создать, - 12 гигабайт, я на крошечном ноутбуке, у которого нет такого объема оперативной памяти.
Любые идеи, что здесь можно сделать?
Edit:
Я играл с размером массива (который, я думаю, может быть причиной разных ошибок, но почему?), и получил еще одно:
4) Делает совершенный смысл.
error: the type `[i32; 300000000000000]` is too big for the current architecture
и моя системная архитектура x86_64
.