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'。 –