錆の中でVec
を初期化することは、他の言語と比較すると非常に遅いです。たとえば、次のコードVecの初期化時間を改善するにはどうすればよいですか?
let xs: Vec<u32> = vec![0u32, 1000000];
は回百万1
let xs: Vec<u32> = Vec::new();
xs.push(0);
xs.push(0);
xs.push(0);
// ...
にを変換します。これをCの次のコードと比較すると、
uint32_t* xs = calloc(1000000, sizeof(uint32_t));
という違いがあります。
は、私はそれはまだ非常に遅いですlet xs: Vec<u32> = Vec::with_capacity(1000000);
xs.resize(1000000, 0);
ビットでもう少し運を持っていました。
Vec
を早く初期化する方法はありますか?
Rustプログラムをどのようにコンパイルしましたか? '--release'フラグを渡しましたか? (これは最適化を有効にします) – BurntSushi5
私が間違っている場合は私を修正しますが、100万個のゼロサイズの要素の配列を割り当てる 'calloc'呼び出しではありませんか? manページは、これを実行すると何も*割り当てられないので、もちろん違いは目立つでしょう... –
ソースをチェックすると、 'vec![0u32、1000000]'は100万コールにコンパイルされませんプッシュする。基本的に 'Vec :: with_capacity' +' Vec :: resize'にコンパイルされます。 – mcarton