Per curiosità, stavo giocando con traboccante la lo stack con questo codice:quattro diversi risultati quando traboccante pila principale
fn main() {
let my_array: [i32; 3000000000] = [3; 3000000000];
println!("{}", my_array[0]);
}
e con mia sorpresa ho finito con tre diversi esiti:
1) Questo è quello che mi aspettavo:
thread '<main>' has overflowed its stack
Illegal instruction (core dumped)
2) Sorprendentemente vago:
Illegal instruction (core dumped)
3) totalmente sconcertante:
208333333
Affinché natura stocastica di presentarsi ho dovuto riavviare la shell, altrimenti i risultati sono stati deterministico (vorrei avere lo stesso messaggio di errore più e più volte).
ho compilato con solo:
rustc my_file.rs
e excuted con:
./my_file
La mia versione rustc:
rustc 1.0.0 (a59de37e9 2015-05-13) (built 2015-05-14)
La mia versione di Ubuntu:
Distributor ID: Ubuntu
Description: Ubuntu 14.04 LTS
Release: 14.04
Codename: trusty
Anche la dimensione della matrice che sto cercando di creare è di 12 concerti, sono su un laptop piccolo che non ha quella quantità di RAM.
Qualche idea su cosa potrebbe succedere qui?
Edit:
stavo giocando con la dimensione della matrice (che credo possa essere la ragione di diversi errori, ma perché?), Ed ha ottenuto un altro:
4) ha perfettamente senso.
error: the type `[i32; 300000000000000]` is too big for the current architecture
e la mia architettura del sistema è x86_64
.
Quindi, stai testando un comportamento indefinito e ti stai chiedendo perché non puoi definire cosa ottieni;)? –
Hm, Rust specifica da qualche parte che questo comportamento non è definito? –
Il comportamento non definito dovrebbe verificarsi solo in un blocco 'non sicuro'. Questo comportamento sembra un bug. –