alloc

Π©ΠΎΠ± використовувати alloc, Π²ΠΈ ΠΏΠΎΠ²ΠΈΠ½Π½Ρ– Ρ€Π΅Π°Π»Ρ–Π·ΡƒΠ²Π°Ρ‚ΠΈ глобальний Ρ€ΠΎΠ·ΠΏΠΎΠ΄Ρ–Π»ΡŒΠ½ΠΈΠΊ (ΠΊΡƒΡ‡Ρ–).

#![no_main]
#![no_std]

extern crate alloc;
extern crate panic_halt as _;

use alloc::string::ToString;
use alloc::vec::Vec;
use buddy_system_allocator::LockedHeap;

#[global_allocator]
static HEAP_ALLOCATOR: LockedHeap<32> = LockedHeap::<32>::new();

static mut HEAP: [u8; 65536] = [0; 65536];

pub fn entry() {
    // Π‘Π•Π—ΠŸΠ•ΠšΠ: `HEAP` Π²ΠΈΠΊΠΎΡ€ΠΈΡΡ‚ΠΎΠ²ΡƒΡ”Ρ‚ΡŒΡΡ Ρ‚Ρ–Π»ΡŒΠΊΠΈ Ρ‚ΡƒΡ‚ Ρ– `entry` Π²ΠΈΠΊΠ»ΠΈΠΊΠ°Ρ”Ρ‚ΡŒΡΡ Ρ‚Ρ–Π»ΡŒΠΊΠΈ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·.
    unsafe {
        // Π”Π°Ρ‚ΠΈ Ρ€ΠΎΠ·ΠΏΠΎΠ΄Ρ–Π»ΡŒΠ½ΠΈΠΊΡƒ Ρ‚Ρ€ΠΎΡ…ΠΈ ΠΏΠ°ΠΌ'яті для виділСння.
        HEAP_ALLOCATOR.lock().init(HEAP.as_mut_ptr() as usize, HEAP.len());
    }

    // Π’Π΅ΠΏΠ΅Ρ€ ΠΌΠΈ ΠΌΠΎΠΆΠ΅ΠΌΠΎ Ρ€ΠΎΠ±ΠΈΡ‚ΠΈ Ρ€Π΅Ρ‡Ρ–, які Π²ΠΈΠΌΠ°Π³Π°ΡŽΡ‚ΡŒ виділСння ΠΊΡƒΡ‡Ρ–.
    let mut v = Vec::new();
    v.push("Рядок".to_string());
}
  • buddy_system_allocator β€” Ρ†Π΅ сторонній ΠΊΡ€Π΅ΠΉΡ‚, який Ρ€Π΅Π°Π»Ρ–Π·ΡƒΡ” Π±Π°Π·ΠΎΠ²ΠΈΠΉ систСмний Ρ€ΠΎΠ·ΠΏΠΎΠ΄Ρ–Π»ΡŒΠ½ΠΈΠΊ ΠΌΡ–ΠΆ друзями. Доступні Ρ–Π½ΡˆΡ– ΠΊΡ€Π΅ΠΉΡ‚ΠΈ, Π°Π±ΠΎ Π²ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ написати свій власний Π°Π±ΠΎ ΠΏΡ–Π΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΠΈ Π΄ΠΎ наявного Ρ€ΠΎΠ·ΠΏΠΎΠ΄Ρ–Π»ΡŒΠ½ΠΈΠΊΠ°.
  • ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ const Ρƒ LockedHeap - Ρ†Π΅ максимальний порядок Ρ€ΠΎΠ·ΠΏΠΎΠ΄Ρ–Π»ΡŒΠ½ΠΈΠΊΠ°, Ρ‚ΠΎΠ±Ρ‚ΠΎ Ρƒ Ρ†ΡŒΠΎΠΌΡƒ Π²ΠΈΠΏΠ°Π΄ΠΊΡƒ Π²Ρ–Π½ ΠΌΠΎΠΆΠ΅ виділяти області Ρ€ΠΎΠ·ΠΌΡ–Ρ€ΠΎΠΌ Π΄ΠΎ 2**32 Π±Π°ΠΉΡ‚.
  • Π―ΠΊΡ‰ΠΎ Π±ΡƒΠ΄ΡŒ-який ΠΊΡ€Π΅ΠΉΡ‚ Ρƒ Π²Π°ΡˆΠΎΠΌΡƒ Π΄Π΅Ρ€Π΅Π²Ρ– залСТностСй Π·Π°Π»Π΅ΠΆΠΈΡ‚ΡŒ Π²Ρ–Π΄ alloc, Ρ‚ΠΎΠ΄Ρ– Π²ΠΈ ΠΏΠΎΠ²ΠΈΠ½Π½Ρ– ΠΌΠ°Ρ‚ΠΈ Ρ‚ΠΎΡ‡Π½ΠΎ ΠΎΠ΄ΠΈΠ½ глобальний Ρ€ΠΎΠ·ΠΏΠΎΠ΄Ρ–Π»ΡŒΠ½ΠΈΠΊ, Π²ΠΈΠ·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Ρƒ Π²Π°ΡˆΠΎΠΌΡƒ Π±Ρ–Π½Π°Ρ€Π½ΠΎΠΌΡƒ Ρ„Π°ΠΉΠ»Ρ–. Π—Π°Π·Π²ΠΈΡ‡Π°ΠΉ Ρ†Π΅ Ρ€ΠΎΠ±ΠΈΡ‚ΡŒΡΡ Ρƒ Π±Ρ–Π½Π°Ρ€Π½ΠΎΠΌΡƒ ΠΊΡ€Π΅ΠΉΡ‚Ρ– Π²Π΅Ρ€Ρ…Π½ΡŒΠΎΠ³ΠΎ рівня.
  • extern crate panic_halt as _ Π½Π΅ΠΎΠ±Ρ…Ρ–Π΄Π½ΠΈΠΉ для Ρ‚ΠΎΠ³ΠΎ, Ρ‰ΠΎΠ± пСрСконатися, Ρ‰ΠΎ Π±ΡƒΠ΄Π΅ зв’язано ΠΊΡ€Π΅ΠΉΡ‚ panic_halt Ρ– ΠΌΠΈ ΠΎΡ‚Ρ€ΠΈΠΌΠ°Ρ”ΠΌΠΎ ΠΉΠΎΠ³ΠΎ ΠΎΠ±Ρ€ΠΎΠ±Π½ΠΈΠΊ ΠΏΠ°Π½Ρ–ΠΊΠΈ.
  • Π¦Π΅ΠΉ ΠΏΡ€ΠΈΠΊΠ»Π°Π΄ Π·Π±ΠΈΡ€Π°Ρ‚ΠΈΠΌΠ΅Ρ‚ΡŒΡΡ, Π°Π»Π΅ Π½Π΅ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΠΈΠΌΠ΅Ρ‚ΡŒΡΡ, ΠΎΡΠΊΡ–Π»ΡŒΠΊΠΈ Π²Ρ–Π½ Π½Π΅ ΠΌΠ°Ρ” Ρ‚ΠΎΡ‡ΠΊΠΈ Π²Ρ…ΠΎΠ΄Ρƒ.