Domanda

Ho un dubbio @ lo stoccaggio di argomenti della riga di comando.

mioprog.exe -cfgfile myconfig.cfg

args riga di comando sono passati quando il processo viene creato in modo che siano strored di fuori del processo?

dove OS memorizza?

È stato utile?

Soluzione

per finestre, gli argomenti della riga di comando sono conservati nel blocco di ambiente di processo ( PEB ), che viene allocato nello spazio di indirizzi di elaborazione dell'utente quando viene creato il processo.

Si può leggere di Windows Internals per dettagli molto di più. Ecco un frammento dal capitolo 5 -. Processi, Threads, e l'occupazione

presumo che è lo stesso per le versioni di Unix. Questi dati devono essere nella memoria del processo, in modo che possa essere letta dal processo stesso.

Altri suggerimenti

Dipende dal sistema operativo e, eventualmente, la lingua. Una buona risposta C-centric è che il sistema operativo crea lo spazio di processo (compreso il caricamento del codice, creando l'heap e stack, ecc). Poi si mette l'argomento vettore riga di comando in una posizione, e quindi copia l'indirizzo del vettore argomento per 'argv' sullo stack, e il conteggio delle parole a 'argc'.

Solo dopo che questi compiti sono svolti fa il sistema operativo consente l'esecuzione del processo.

Gli argomenti della riga di comando sono memorizzati nello spazio di memoria dell'applicazione. Esattamente dove si differenzia da OS a OS, la mia ipotesi è che di solito va in fondo al mucchio. Il codice che lo mette c'è nel codice sorgente del kernel per exec su Unix-like sistemi operativi, non so dove sarebbe in Windows (non che si può vedere la fonte in ogni caso). Il codice runtime C (questo è dove "CRT" viene) calcia argv e argc dalla pila e quindi chiama principale. Se siete interessati a saperne di più come un eseguibile si avvia in Linux, questo lavoro da Ulrich Drepper (glibc manutentore) può essere di valore: http://people.redhat.com/drepper/dsohowto.pdf

in Linux: argomenti della riga di comando vengono memorizzati nello stack. a non confondere variabile d'ambiente con argomenti della riga di comando, lo spazio di indirizzi del processo hanno un'area di memoria separata per le variabili ambientali

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top