繁体   English   中英

为什么在 static 没有链接时 const 会消失?

[英]Why does a const disappear during linking when static doesn't?

我的 static 库箱中有这样的 function:

use super::*;

static BLANK_VEC: [u8; 16] = [0_u8; 16];
pub fn pad(name: &'static str) -> String {
    let mut res = String::from(name);
    res.push_str(&String::from_utf8_lossy(&BLANK_VEC[name.len()..]));
    res
}

当我将它链接到 C 代码时,它按预期工作,但如果我链接下面的代码(唯一的区别是const而不是static ),ZD304BA20E96D87411588_EEABAC850E34Z BLANK_VEC文件中不会出现。 它可以编译和运行,直到它得到一个 HardFault。

use super::*;

const BLANK_VEC: [u8; 16] = [0_u8; 16];
pub fn pad(name: &'static str) -> String {
    let mut res = String::from(name);
    res.push_str(&String::from_utf8_lossy(&BLANK_VEC[name.len()..]));
    res
}

这是 Rust 端的错误吗? 我认为是因为const变量以某种方式超出了 scope 。 我可以引用它并编译它。 有保证的 memory 安全性在哪里? 为什么我不必使用unsafe块来做到这一点?

如果这取决于我的 linker:我使用arm-gcc-none-eabi

编辑:我理解为什么会发生这种情况,但 Rust 不应该确保用户使用不会消失的变量吗?

这不是 rust 中的错误: const定义了在每个使用站点复制的常量值(因此在运行时不存在)。

static定义了一个全局变量(可能是也可能不是常量),因此存在于最终程序中,它是 memory 中的实际单个位置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM