Wie verwaltet man den Speicher mit dem Putenv-Systemaufruf?

8

Der POSIX-Systemaufruf putenv gibt an, dass die zugewiesene Speicherzeichenfolge vom Aufrufer nach dem Aufruf von putenv nicht freigegeben werden kann. Daher können Sie putenv nicht mit einer automatischen Variable aufrufen.

Beispiel:

%Vor%

Meine Frage an dieser Stelle ist ... wie ist der Umgebungsvariablenspeicher free 'd? Muß man sie getrennt aufbewahren und Dinge ständig aus der Umwelt entfernen? Ie.

%Vor%

EDIT: Es sieht so aus, als müsste ich das selbst verfolgen, zumindest nach Valgrind:

%Vor%     
Billy ONeal 24.01.2011, 01:53
quelle

2 Antworten

15

Verwenden Sie nicht putenv() , wenn Sie sich Sorgen um den Speicherverlust machen.

Deshalb bietet POSIX setenv() und unsetenv() - diese übernehmen die Kontrolle über das Gedächtnis und verwalten es.

Zitieren der manuellen Seite putenv() (URL oben):

  

Die Funktion putenv() soll das Argument string verwenden, um Umgebungsvariablenwerte festzulegen. Das Argument string sollte auf eine Zeichenfolge der Form " name= value " verweisen. Die Funktion putenv() soll den Wert der Umgebungsvariablen name gleich dem Wert value machen, indem eine vorhandene Variable geändert oder eine neue Variable erstellt wird. In jedem Fall wird die Zeichenfolge, auf die string zeigt, Teil der Umgebung, sodass die Änderung der Zeichenfolge die Umgebung ändern muss. Der von string verwendete Platz wird nicht mehr verwendet, wenn eine neue Zeichenfolge, die name definiert, an putenv() übergeben wird.

    
Jonathan Leffler 24.01.2011, 02:01
quelle
2

Nein, Sie müssen das nicht manuell tun. Speicher für Ihre Umgebung wird vom Betriebssystem freigegeben (als Teil Ihres Prozessspeichers), wenn Ihr Prozess beendet wird.

    
Greg Hewgill 24.01.2011 01:58
quelle

Tags und Links