dove allocare la stanza per la nuova variabile di ambiente?

0

in unix, voglio modificare le variabili ambientali.
se la dimensione del nuovo valore è maggiore di quella precedente, la stanza per la nuova variabile viene allocata da malloc.
tuttavia, la memoria per le variabili ambientali è sopra lo stack? (non memoria heap) dove allocare la stanza per la nuova variabile?

    
posta KayKay 17.04.2011 - 15:45
fonte

1 risposta

1

La memoria per le variabili di ambiente iniziali può essere sopra lo stack, ma questo non significa necessariamente che anche i nuovi debbano essere allocati lì.

Come allocare le stringhe utilizzate per impostare le variabili di ambiente dipende da quale funzione si usa per impostarlo:

  • putenv () non copia la stringa ("nome = valore") passata ad essa, quindi ha bisogno di essere in un posto che non viene deallocato. Ad esempio, un malloc () che non viene liberato è buono, ma funzionano anche stringhe letterali (se sai quale nome + valore vuoi impostare in fase di compilazione).
  • setenv () copia le stringhe ("nome", "valore") è passato, quindi possono essere ovunque tu piace. Possono essere letterali, allocati con malloc (), alloca (), il nuovo char di C ++ [], oppure possono essere solo un array globale o stack-allocato. E quando setenv () ritorna puoi smaltire o riutilizzare quella memoria come preferisci. (Nota il terzo parametro (sovrascrittura int) se decidi di usarlo)

Posso suggerire di leggere su quelle funzioni?

    
risposta data 17.04.2011 - 16:46
fonte

Leggi altre domande sui tag