对于数组

时间:2017-04-16 08:31:05

标签: rust

以下代码从sysconf获取页面大小,以便从文件系统中最佳地读取文件。我无法使用大小创建缓冲区:

lazy_static! {
    static ref PAGE_SIZE: i64 = sysconf(SysconfVariable::ScPagesize).unwrap();
}

fn main() {
    let mut buffer = [0; *PAGE_SIZE as usize];
}

给我:

error[E0080]: constant evaluation error
  --> src/main.rs:6:30
   |
6  |         let mut buffer = [0; *PAGE_SIZE as usize];
   |                              ^^^^^^^^^^ unimplemented constant expression: deref operation

我认为这是一个操作员优先级问题并尝试用括号括起来但结果仍然相同:

error[E0080]: constant evaluation error
  --> src/main.rs:6:30
   |
6  |         let mut buffer = [0; (*(PAGE_SIZE)) as usize];
   |                              ^^^^^^^^^^^^^^ unimplemented constant expression: deref operation

如何使用上面的常量来分配缓冲区?

1 个答案:

答案 0 :(得分:2)

这根本不是编译时常量。对于无法确定编译时间的任何内容,请使用vec!

let mut buffer = vec![0; *PAGE_SIZE as usize];

目前,可变长度数组(VLA)没有编译器级别的支持。