MST

星途 面试题库

面试题:Rust中静态值的存储特性基础

在Rust中,简述静态变量(`static`)和常量(`const`)在存储特性上有什么主要区别?请分别举例说明它们的声明方式以及在内存中的存储特点。
21.4万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试

静态变量(static

  1. 声明方式
static MY_STATIC: i32 = 42;
  1. 内存存储特点
    • 静态变量具有固定的内存地址,其生命周期贯穿整个程序的运行期间。它存储在静态内存区域,这意味着在程序启动时就为其分配内存,直到程序结束才释放。
    • 静态变量是可变的,不过对其进行可变操作时需要使用mut关键字声明,并且访问时需要额外的unsafe块,因为多个线程可能同时访问静态变量,可变操作可能导致数据竞争。例如:
static mut COUNTER: i32 = 0;
fn increment() {
    unsafe {
        COUNTER += 1;
    }
}

常量(const

  1. 声明方式
const MY_CONST: i32 = 42;
  1. 内存存储特点
    • 常量没有固定的内存地址。常量的值在编译时就被确定,并且会在使用它的地方进行内联替换,类似于宏展开。
    • 常量只能使用不可变的值,不允许声明可变常量。例如:
// 下面这样声明可变常量是错误的
// const mut BAD_CONST: i32 = 0;

主要区别总结:

  • 内存地址:静态变量有固定内存地址,常量没有固定内存地址,在编译时进行内联替换。
  • 可变性:静态变量可以是可变的(需mutunsafe),常量只能是不可变的。
  • 生命周期:静态变量生命周期贯穿程序始终,常量在编译时确定并替换,不涉及运行时的生命周期概念。