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
バッファの割り当てに上記の定数を使用するにはどうすればよいですか?
これはコンパイル時定数ではありません。ドキュメントもそう言います。ページサイズを一度読み取ってどこにでも使用できる他の方法はありますか?ページサイズを実際のコンパイル時定数に書き込む方法はありますか? 'static PAGE_SIZE:i64 = ...'おそらく?何か? –
これは、コンパイラプラグイン、または 'env!'と組み合わされたビルドスクリプトによって実現できます。スタックにページを割り当てるとオーバーフローが発生する可能性があるため、スタックに割り当てることをお勧めできません。 –
@ TatsuyukiIshi:ビルドスクリプトと 'env!'の使用は、*クロスコンパイル*の際に注意深く行うべきです。ターゲット・システムとホスト・システムのページ・サイズが異なる場合があります。したがって、代わりに 'cfg'を使うことを提案します。 –