Rust 程序设计语言 简体中文版 1.85.0语言中,尝试读取数据结构之后的值是未定义行为(undefined behavior)。你会得到任何 对应数据结构中这个元素的内存位置的值,甚至是这些内存并不属于这个数据结构的情况。这 被称为 缓存区过读(buffer overread),并可能会导致安全漏洞,比如攻击者可以像这样操作 索引来读取储存在数据结构之后未经授权的数据。 为了保护程序不受此类漏洞的影响,如果尝试读取一个索引不存在的元素,Rust 会停止执行 使用迭代器链对作用域中的三个变量进行某种数学计算:一个叫 buffer 的数据 slice、一个有 12 个元素的数组 coefficients、和一个代表位数据位移量的 qlp_shift。我们在这个例子中 声明了这些变量,但没有为它们赋值;虽然这些代码在其上下文之外没有太多意义,不过仍是 一个简明的现实例子,来展示 Rust 如何将高级概念转换为底层代码。 let buffer: &mut [i32]; let coefficients: coefficients: [i64; 12]; let qlp_shift: i16; for i in 12..buffer.len() { let prediction = coefficients.iter() .zip(&buffer[i - 12..i]) .map(|(&c0 码力 | 562 页 | 3.23 MB | 25 天前3
共 1 条
- 1













