Speicher, der mit alloca zugewiesen wurde, wird am Ende der Funktion oder am Ende des Bereichs freigegeben?

8

Wenn ich eine Funktion wie diese habe:

%Vor%

tmp wird bei jeder Iteration der while-Schleife freigegeben, richtig?

Wenn ich diese Funktion schreibe:

%Vor%

tmp wird am Ende des Bereichs oder am Ende der Funktion freigegeben?

    
Damian 23.03.2011, 15:23
quelle

3 Antworten

7

Es wird am Ende der Funktion freigegeben, aber da Sie alloca() in der Schleife aufrufen, erhalten Sie wahrscheinlich einen Stapelüberlauf. Wenn sich size innerhalb der Funktion nicht ändert, sollten Sie alloca() vor der Schleife aufrufen.

    
sharptooth 23.03.2011, 15:25
quelle
4

alloca wird auf dem Stack zugewiesen und hat keine Kenntnisse über Bereiche, so dass es nach dem Verlassen des Stack-Frames (= nach Verlassen der Funktion) freigegeben wird.

    
DarkDust 23.03.2011 15:24
quelle
2

Der mit alloca() zugewiesene Speicher wird freigegeben, wenn die Funktion beendet wird. Weitere Informationen finden Sie beispielsweise auf der Manpage .

In Bezug auf den ersten Fall, nur einer Auto-Variablen im Bereich, bin ich nicht sicher, wie Sie definieren würden, dass es "befreit" wird. Sie können es nicht außerhalb des Bereichs referenzieren, der es definiert, und wenn es einen Initialisierer hätte, würde es bei jeder Iteration neu initialisiert werden.

    
unwind 23.03.2011 15:25
quelle

Tags und Links