2013-04-04 97 views
0

我有一個我在Linux中開發的C++應用程序。我正在分配一些動態內存並最終調用forkpty()。子進程正在調用execl(),正如我們所知,如果execcl()成功執行該命令,它將永遠不會返回。此外,正如我們所知,forkpty()複製了所有父級的數據。因此,如果child()進程永遠不會將控制權返回給我的應用程序以便最終執行內存清除,那麼可以安全地說,從子進程調用execl()時最好沒有分配任何動態內存? ?我無法相信我在這裏找不到這個......先謝謝了。forkpty()和execl()的子進程的堆內存管理?

+1

[在exec()更改程序映像之後malloc的內存會發生什麼變化?](http://stackoverflow.com/questions/5429141/what-happens-to-malloced-memory-after-exec -changes最節目圖像) – 2013-04-04 13:39:26

回答

1

分配的內存是過程映像的一部分;當您撥打 execl時,整個過程映像將被替換,並且其中的任何內存都會像其餘部分一樣「簡單消失」,然後返回到操作系統 ,然後該操作系統將在其他地方使用該操作系統。

1

作爲execl()(如果調用成功)的一部分,所有「分叉」進程內存被釋放。

如果情況並非如此,那麼在普通的linux系統中將會出現大量內存泄漏,因爲幾乎不可能在沒有分配內存的情況下寫入任何內容,例如,如果參數到execl()被分配,您在撥打execl()之前不可能釋放它們。