0
以下代码从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
如何使用上述常量来分配缓冲区?
好的,这不是编译时常量。文件也这样说。有没有其他方式可以一次读取页面大小并在任何地方使用?有没有办法将页面大小写入真正的编译时常量? '静态PAGE_SIZE:i64 = ...'也许?什么? –
你可以通过一个编译器插件或者'env!'编译脚本来实现。我不推荐在堆栈上分配,因为在堆栈上分配页面可能会导致溢出。 –
@TatsuyukiIshi:我想说明的是,在* cross-compiling *的情况下,应该谨慎使用构建脚本和'env!'。目标系统和主机系统可能有不同的页面大小。因此,我会建议使用'cfg'。 –