Quanto è grande il codice binario?

4

Dove va il binario in un computer? Quando accendi il computer, punta al bios e lo attraversa. Ho capito. Quindi carica i dati da qualcosa (disco, flash, ecc.). Ma dove va? Il binario va in ram? Significa che se il mio programma è 2mb e ram è 32mb posso solo indirizzare 30mb? Voglio principalmente sapere in modo da poter dire quanto può essere grande il mio bidone.

Sono solo un po 'confuso su questo problema. So che è specifico per la piattaforma. Ma in generale dove andrebbe, e in generale quale documento dovrei esaminare per verificare queste informazioni?

    
posta ToBeen 14.07.2014 - 09:50
fonte

4 risposte

8

Con i processori utilizzati per i dispositivi embedded, ci sono tre possibilità:

  1. Il processore esegue il codice direttamente da flash / ROM. In questo caso, il codice non toglie alcuna RAM al sistema. In questa configurazione, la RAM e il flash / ROM sono generalmente associati a diverse porzioni dello spazio degli indirizzi che il processore può indirizzare, quindi la dimensione massima dei binari è limitata dalla quantità fisica di flash / ROM e dalla quantità totale di la memoria (RAM + ROM) necessaria al tuo software è limitata dalle capacità di indirizzamento del processore.

  2. Il file binario viene copiato nella RAM e non è disponibile memoria virtuale. In questo caso, il binario rimuove la RAM dal sistema e il software avrà meno memoria su cui lavorare. La dimensione dei tuoi binari è limitata dalla quantità fisica di RAM che hai e dalla quantità totale di memoria (RAM + ROM) richiesta dal tuo software.

  3. Il binario viene copiato nella RAM e lì è la memoria virtuale disponibile. Questo è simile alla seconda opzione, con la differenza principale che la quantità di RAM è apparentemente aumentata copiando parti di esso nella memoria secondaria (flash, scheda SD, hard-disk, ecc.). Dal punto di vista della memoria, tale sistema è paragonabile a un computer desktop.

Il foglio dati per il processore dovrebbe indicare se supporta l'esecuzione direttamente da flash / ROM. La scheda tecnica per la scheda che si sta utilizzando dovrebbe indicare quanta memoria e di quale tipo ha la scheda (potrebbe anche indicare se il processore può / eseguirà il codice direttamente dal flash). La documentazione del sistema operativo in uso dovrebbe menzionare se il sistema operativo fornisce funzionalità di memoria virtuale. I grandi sistemi operativi (Linux, WinCE, ecc.) Lo fanno in genere.

    
risposta data 14.07.2014 - 14:05
fonte
2

Does the binary go in ram?

Sulla maggior parte dei sistemi: sì. Sebbene in molti sistemi di oggi ci sia un ulteriore livello di astrazione tra la RAM fisica e la RAM che il processore "crede di avere" - si chiama memoria virtuale, come già sottolineato dall'altra risposta. Quindi, se ad esempio la tua macchina ha 32 MB di RAM fisica, ma 64 MB di memoria virtuale, non appena i programmi in esecuzione richiedono più di 32 MB in totale, il sistema operativo cerca di "scambiare" le aree meno utilizzate della memoria fisica sul disco e carica la memoria a cui è necessario accedere immediatamente dal disco nuovamente nella memoria fisica. Per il tuo programma (compresi altri programmi sulla macchina) sembra che ci siano 64 MB di RAM fisica, oltre al fatto che le cose diventano molto più lente quando si attraversano spesso i confini di 32 MB.

Does that mean if my program is 2mb and ram is 32mb I can only address 30mb?

Se il tuo programma ha una dimensione del codice di 2 MB e il tuo sistema ha solo 32 MB di memoria (fisico senza mem virtuale o 32 MB di memoria virtuale), questo lascia 30 MB per qualsiasi altra cosa: spazio di lavoro per il tuo programma, così come il codice e la memoria di lavoro per tutti gli altri processi o programmi eseguiti contemporaneamente.

in general what document would I look at to check this information

La quantità di RAM fisica è tipicamente documentata nella documentazione hardware del sistema (e anche nei cataloghi pubblicitari, ma in realtà non consiglierei di prenderli come riferimento serio). La quantità di RAM virtuale può essere parametrizzata in genere nelle impostazioni del sistema. E se vuoi sapere quanta RAM il tuo programma può davvero usare per se stesso, devi ispezionare un sistema in esecuzione con qualche tipo di sistema monitor e vedere quanta memoria fisica o virtuale è ancora libera quando non ci sono altri processi in esecuzione oltre al quelli del sistema operativo.

    
risposta data 14.07.2014 - 13:09
fonte
0

Il tuo programma può diventare grande quanto la memoria virtuale sul tuo sistema. Per ottenere una risposta più specifica, si prega di fornire informazioni più specifiche. Sei solo interessato? Lottando con un sistema embedded? Fare i compiti?

    
risposta data 14.07.2014 - 09:53
fonte
0

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).

    
risposta data 17.07.2014 - 02:13
fonte

Leggi altre domande sui tag