面试题答案
一键面试内存布局区别
static
变量:static
变量具有固定的内存地址,在程序的整个生命周期内都存在。它存储在静态存储区。例如:
static MY_STATIC: i32 = 42; fn main() { println!("The value of MY_STATIC is: {}", MY_STATIC); }
- 由于
static
变量有固定内存地址,其值可以在不同线程间共享,并且static
变量是可变的(使用mut
关键字修饰时),但可变static
变量在多线程环境下访问需要额外的同步机制(如Mutex
),否则会导致数据竞争。
const
常量:const
常量在编译时求值,其值直接嵌入到使用它的代码中。例如:
const MY_CONST: i32 = 42; fn main() { let x = MY_CONST + 1; println!("The value of x is: {}", x); }
const
常量没有固定的内存地址,它更像是一个编译期的符号替换。它总是不可变的,并且不能使用mut
关键字修饰。
存储位置和生命周期特点
static
变量:- 存储位置:存储在静态存储区,与程序的其他静态数据一起存放。
- 生命周期:与程序的生命周期相同,从程序启动到程序结束一直存在。例如在多线程环境中,不同线程可以在程序运行的任何时候访问
static
变量(前提是做好同步)。
const
常量:- 存储位置:没有独立的存储位置,因为它在编译时被嵌入到使用它的代码中。
- 生命周期:在编译期确定,不涉及运行时的生命周期概念。只要使用它的代码被编译,它就存在(以嵌入的形式)。