Rust中可以用static关键字声明静态变量
static AGE : i32 = 20;
与let语句一样
static语句同样也是一个模式匹配
与let语句不同的是
用static声明的变量
他的生命周期是整个程序
从启动到退出
static变量的生命周期永远是static
它占用的内存空间也不会在执行过程中回收
这也是rust中唯一的声明全局变量的方法
由于rust非常注重内存安全
因此全局变量的使用有许多限制
这些限制都是为了防止程序员写出不安全的代码
全局变量必须在声明的时候马上初始化
全局变量的初始化必须是编译期可确定的常量
不能包括执行期才能确定的表达式、语句和函数调用
带有mut修饰的全局变量
在使用的时候必须使用unsafe关键字
static GLOBAL : i32 = 100;
fn main() {
println!("{}",GLOBAL);
// 局部变量声明,可以留待后面初始化,只要保证使用前已经初始化即可
let x;
let y = 1_i32;
x = 2_i32;
println!("{} {}",x,y);
// 全局变量必须声明的时候初始化,因为全局变量可以写到函数外面,被任意一个函数使用
static G1 : i32 = 3;
println!("{}",G1);
// 可变全局变量无论读写都必须用unsafe修饰
static mut G2 : i32 = 4;
unsafe {
G2 = 5;
println!("{}",G2);
}
static array : [i32;3] = [1,2,3];
}
全局变量的内存不是分配在当前函数栈上
函数退出的时候
并不会销毁全局变量占用的内存空间
程序退出才会回收
enjoy