alloc crate
- Rust kursu
- Uzman
- Ders 32/46
- 4 dk
alloc crate ile heap kullanmayı öğrenirsin.
alloc crate'i
Bir bellek ayırıcı (allocator) varsa, no_std kodu alloc crate'ini kullanarak Vec, String, Box, Rc, BTreeMap ve format!'a erişebilir:
#![no_std]
extern crate alloc;
use alloc::string::String;
use alloc::vec::Vec;
use alloc::format;
pub fn rapor(v: &[u32]) -> String {
let ciftler: Vec<u32> = v.iter().copied().filter(|x| x % 2 == 0).collect();
format!("{} çift", ciftler.len())
}Ayırıcıyı uygulama sağlar: gömülü sistemlerde embedded-alloc gibi bir crate, #[global_allocator] ile kaydedilir.
std'de alloc
alloc crate'i normal programlarda da açıkça kullanılabilir; bu, kodun no_std'ye taşınmaya hazır olduğunu göstermenin bir yoludur:
extern crate alloc;
use alloc::string::String;
use alloc::vec::Vec;
let mut v: Vec<i32> = Vec::new();
v.push(1);
let s = String::from("merhaba");std::vec::Vec ile alloc::vec::Vec aynı türdür; yalnızca yol farklıdır.
Uygulama alloc türleri
extern crate alloc; yaz ve alloc::vec::Vec ile alloc::string::String'i use et. 1 ve 2 içeren bir vektör ve "merhaba" metni oluşturup ikisini boşlukla yazdır (vektörü {:?} ile).
Başlangıç kodu
fn main() {
// buraya yaz
}Örnek çözüm
extern crate alloc;
use alloc::string::String;
use alloc::vec::Vec;
fn main() {
let mut v: Vec<i32> = Vec::new();
v.push(1);
v.push(2);
let s = String::from("merhaba");
println!("{:?} {}", v, s);
}Beklenen çıktı
[1, 2] merhaba
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Neden <code>HashMap</code> alloc'ta değil, <code>BTreeMap</code> ise var?
- İkisi de vardır
- HashMap'in varsayılan hash'i işletim sisteminden rastgele tohum ister Doğru cevap
- HashMap daha yavaştır
- BTreeMap daha yenidir
Açıklama: no_std ortamında hashbrown crate'i, kendi hash fonksiyonunla HashMap sağlar.
2 Ayırma crate'i
extern crate ____;
use alloc::vec::Vec;
extern crate alloc;
use alloc::vec::Vec;
Açıklama: extern crate alloc; heap türlerini no_std'de kullanılabilir yapar.
3 Yol ve tür
| Kavram | Anlamı |
|---|---|
alloc::vec::Vec |
Dinamik dizi |
alloc::string::String |
Sahip metin |
alloc::boxed::Box |
Heap kutusu |
alloc::collections::BTreeMap |
Sıralı harita |