CodeBlanks Logo Icon CodeBlanks

alloc crate

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

main.rs
fn main() {
    // buraya yaz
}

Örnek çözüm

main.rs
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

Soru
extern crate ____;
use alloc::vec::Vec;
Cevap
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

Uzman bölümündeki tüm dersler