Memoria dinamica: allocazione nell’heap in assembly
Richieda e rilasci memoria in fase di esecuzione dall’assembly usando le interfacce dell’heap del sistema operativo (brk/mmap su Linux, VirtualAlloc su Windows) e malloc/free della libreria C.
Memoria dinamica: allocazione nell’heap in assembly è una lezione Assembly Language & x86 Low-Level Systems Programming gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Assembly Language & x86 Low-Level Systems Programming, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Assembly Language & x86 Low-Level Systems Programming include 4 lezioni in totale.
Parti di questa lezione non sono ancora state tradotte e vengono mostrate in inglese.
Stack vs Heap
The stack holds fixed, scope-bound data and is automatically reclaimed. The heap provides dynamic memory whose size and lifetime you control at run time.
When You Need the Heap
Use heap memory when the size is unknown at assemble time or the data must outlive the procedure that created it, e.g. growing buffers and data structures.
Linux: the brk Syscall
The brk/sbrk syscall grows the programs data segment. It is low level and mostly superseded by mmap for general allocation.
mov rax, 12 ; sys_brk
mov rdi, 0
syscallLinux: mmap
mmap maps fresh anonymous pages and is the modern way to get large heap regions directly from the kernel.
mov rax, 9 ; sys_mmap
syscallReleasing with munmap
Memory obtained from mmap is returned with munmap, telling the kernel those pages are free.
mov rax, 11 ; sys_munmap
syscallWindows: VirtualAlloc
On Windows you call VirtualAlloc to reserve and commit pages, and VirtualFree to release them.
call VirtualAllocUsing the C Library
When linking with the C runtime, it is far simpler to call malloc and free, which manage a heap on top of the OS primitives.
mov rdi, 64 ; bytes
call mallocChecking the Result
Allocation can fail. malloc returns NULL and syscalls return a negative error code, so always test the result before using the pointer.
test rax, rax
jz alloc_failedFreeing Memory
Every allocation needs a matching free. Forgetting to free leaks memory; freeing twice or using freed memory corrupts the heap.
mov rdi, rax ; pointer
call freeAlignment Considerations
Heap blocks are returned suitably aligned for any type. Manual allocators must respect alignment for SSE and atomic operations.
Common Pitfalls
Heap bugs are subtle:
- Memory leaks from missing free
- Use-after-free
- Double free
- Buffer overruns past the allocation
Quick Check
Test your understanding of heap allocation.
Recap
You learned heap allocation:
- Stack is automatic; heap is run-time managed
- Linux:
mmap/munmaporbrk - Windows:
VirtualAlloc/VirtualFree - With libc use
malloc/free; always check for NULL and free once
Domande Frequenti
La lezione «Memoria dinamica: allocazione nell’heap in assembly» è gratuita?
Sì — il testo completo di «Memoria dinamica: allocazione nell’heap in assembly» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Assembly Language & x86 Low-Level Systems Programming, passa a CoddyKit PRO. Il corso Assembly Language & x86 Low-Level Systems Programming include 4 lezioni in totale.
Cosa imparerò in «Memoria dinamica: allocazione nell’heap in assembly»?
Richieda e rilasci memoria in fase di esecuzione dall’assembly usando le interfacce dell’heap del sistema operativo (brk/mmap su Linux, VirtualAlloc su Windows) e malloc/free della libreria C. Eserciti Assembly Language & x86 Low-Level Systems Programming con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Assembly Language & x86 Low-Level Systems Programming?
Non è richiesta alcuna esperienza precedente. Assembly Language & x86 Low-Level Systems Programming su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.
Quanto tempo richiede la lezione «Memoria dinamica: allocazione nell’heap in assembly»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Assembly Language & x86 Low-Level Systems Programming?
Sì. Ogni lezione Assembly Language & x86 Low-Level Systems Programming include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Concetti di memoria virtuale
- Chiamate di sistema Linux (syscall)
- Interazione con l'API di Windows
- Memoria dinamica: allocazione nell’heap in assembly