Il bios scorre da una rom, inizializza il dram, enumera il pcie e un numero di altre cose.
Il BIOS trova quindi il tuo o qualche programma sul dispositivo di avvio, lo copia su ram e lo esegue lì.
la risposta di base è sì, se hai 32mb e il tuo programma è 2mb allora c'è ancora 30mb per heap e stack.
Le soluzioni di memoria virtuale devono prima essere impostate e gestite, ma supponendo che ciò sia fatto è possibile accedere ai limiti dello spazio di memoria virtuale o del supporto utilizzato dietro lo spazio di memoria virtuale (disco fisso, ecc. ). Se il tuo programma sta scappando dal disco caricato dal bootloader, non disponi di memoria virtuale a meno che non lo implementi tu stesso in modo che tu sia limitato alla 32mb nel tuo esempio.
A seconda di come scrivi il tuo codice, globals vs locals, l'uso dell'heap o meno determina la quantità di quel 32mb che puoi scavare con il tuo attuale binario, avrai bisogno di un po 'di stack ma più variabili locali usi e le più piccole e più le tue funzioni sono annidate, la quantità di utilizzo dello stack può aumentare. Questo può essere compensato con i globali, ma può anche masticare rapidamente il tuo ram (questi verrebbero conteggiati nel tuo "binario" e sarebbero uno stack di quantità noto che è abbastanza dinamico anche se può essere in qualche modo calcolato).