MST

星途 面试题库

面试题:Rust中静态值的内存布局基础

在Rust中,简述静态变量(`static`)和常量(`const`)在内存布局上有什么主要区别?请举例说明它们在存储位置和生命周期上的特点。
14.1万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试

内存布局区别

  1. static变量
    • static变量具有固定的内存地址,在程序的整个生命周期内都存在。它存储在静态存储区。例如:
    static MY_STATIC: i32 = 42;
    fn main() {
        println!("The value of MY_STATIC is: {}", MY_STATIC);
    }
    
    • 由于static变量有固定内存地址,其值可以在不同线程间共享,并且static变量是可变的(使用mut关键字修饰时),但可变static变量在多线程环境下访问需要额外的同步机制(如Mutex),否则会导致数据竞争。
  2. const常量
    • const常量在编译时求值,其值直接嵌入到使用它的代码中。例如:
    const MY_CONST: i32 = 42;
    fn main() {
        let x = MY_CONST + 1;
        println!("The value of x is: {}", x);
    }
    
    • const常量没有固定的内存地址,它更像是一个编译期的符号替换。它总是不可变的,并且不能使用mut关键字修饰。

存储位置和生命周期特点

  1. static变量
    • 存储位置:存储在静态存储区,与程序的其他静态数据一起存放。
    • 生命周期:与程序的生命周期相同,从程序启动到程序结束一直存在。例如在多线程环境中,不同线程可以在程序运行的任何时候访问static变量(前提是做好同步)。
  2. const常量
    • 存储位置:没有独立的存储位置,因为它在编译时被嵌入到使用它的代码中。
    • 生命周期:在编译期确定,不涉及运行时的生命周期概念。只要使用它的代码被编译,它就存在(以嵌入的形式)。