C語言中申請的堆內存能不能自動釋放?每次都要手動 free 太麻煩,也容易忘記。
但是這是C語言,沒有類和對象、構造析構這些技術,想要自動釋放很難。
下面給大家介紹一種黑科技。
之前我們講過 GNU 的 attribute 屬性,里面可以是 packed unused 等等,還有一個,叫 cleanup。
cleanup的作用就是當其聲明的變量離開了生命周期,就會調用指定的函數。
這剛好滿足了我們的要求。
比如這樣的代碼,給 str 申請了內存,但是整個代碼中也沒有釋放,妥妥的內存泄漏。
定義 str 的時候,可以在后面加上 attribute cleanup,指定函數 func,意思就是,當變量 str 生命周期結束的時候,會調用 func 函數。換句話說,只要 main 函數結束了,就會調用 func 函數。
func 函數有個參數,是變量 str 的地址,可以寫成 char ** 類型,在函數的內部可以釋放剛才申請的堆內存。
這樣在 main 函數結束的時候,就會自動調用 func 函數釋放堆內存,有點智能指針的意思。
有了 func 函數,在任意地方定義指針,只要加上 attribute 屬性,函數運行結束,就能自動釋放堆內存。
attribute 屬性并不是 C 標準內容,屬于 GNU 擴展功能,不過也不排除后面被加到標準里面的可能性。
了解一下就行,不建議使用,太過于冷門。
-
內存
+關注
關注
8文章
3004瀏覽量
73897 -
C語言
+關注
關注
180文章
7601瀏覽量
136244 -
函數
+關注
關注
3文章
4308瀏覽量
62442
原文標題:堆內存也能自動釋放
文章出處:【微信號:學益得智能硬件,微信公眾號:學益得智能硬件】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論