C/C++指針、數組與內存管理(三)

關於C/C++的內存管理,博主發現一篇博文已經總結的很好了。內存管理

這裏做幾點總結:

(1)函數體內的局部變量保存在棧上, 但棧的內存容量有限,在Linux下可以使用ulimit -s查看棧的內存容量。在程序中注意不要超過這個值。當相應的範圍結束時,局部變量就不能在使用。

(2)使用malloc/new等動態內存分配函數,內存從堆上獲得。

(3)動態內存的生存週期可以由自己決定,但問題也多。使用完畢後一定要使用free/delete函數將申請的內存釋放,並將指針指向NULL,避免產生野指針。

(4)程序中頻繁使用malloc/new等動態內存分配函數,容易產生內存碎片,對程序穩定性產生不利影響。

(5)malloc/new申請的一定是一塊連續的內存,申請的內存可能比實際申請的大,也可能申請不到。最好分配之後判斷一下是不是爲NULL

(6)使用free等釋放指針時,一定要傳遞指針起始地址,否則將導致申請的部分內存不能被釋放,這個稱爲內存泄漏

(7)使用malloc內存申請成功後,最好使用memset函數對申請的內存清零

(8)野指針,野指針是指指針變量沒有被初始化,指針變量free後沒有指向NULL,指針操作超越了變量的作用範圍,內存越界等。野指針的出現是非常危險的。

(9)禁止釋放或函數內返回非動態申請的內存(棧中的內存,函數中的局部變量等)

(10)使用malloc/new等方式動態分配內存,速度一般比較慢。

由上可知,不合理的使用指針造成的後果將是非常危險的。但某些情況下使用指針也將帶來極大的便利,在c語言中也有很多情況不得不使用指針,不能因噎廢食,就是使用指針時一定要小心小心再小心。在c++中,我們可以使用引用運算符、string類型等方式儘量避免使用指針。

c++ string類型簡介

string類定義隱藏了字符串的數組性質,string類能夠自動處理字符串的大小,而不用擔心數組太大導致內存浪費或者太小導致數組越界。

string類的初始化:

string test = "hello world"

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章