做網站美工廣州seo推廣公司
一、問題
????????C語?、C++語?和C#語?,這三門語?,?個??個加號(+)多,C語?沒有加號,C++有兩個加號,C#有四個加號。隨著語?的發(fā)展,?個??個簡單,很多問題系統(tǒng)都給做了,?需程序員考慮。
????????然?,最基層的也是最重要的,C語?卻在很多地?都需要程序員??動?,如內存管理。在管理內存中,還要時刻考慮內存的泄露等問題。下?介紹?下與內存息息相關的?個重要概念。
二、解答
1.野指針
????????從字?上理解,“野”字就好像是沒有?管、?為粗魯、不守規(guī)矩的意思。?野指針也是這樣的,沒有規(guī)矩。野指針不同于 NULL 指針,它是指向“垃圾”內存的指針。
野指針的成因可能會有如下?種情況:
(1)指針變量沒有被初始化。指針變量在創(chuàng)建的同時應該被初始化,指向 NULL 指針或者指向?塊合法的內存,否則它的指向是隨機的。
(2)指針的操作超過了變量的作?范圍。
(3)指針被釋放或者刪除后,沒有被置為 NULL,在以后的程序中被誤認為是合法的。
2. 棧 (stack)
????????棧是?來保存局部變量,棧上的內容只在函數的范圍內存在,函數運?結束,這些內容也會被銷毀。棧的特點就是效率?,但空間??有限。
3. 堆(heap)
????????堆是由 malloc( ) 、 calloc( ) 等函數或者 new 操作符獲得的內存,由 free( ) 函數和 delete( )? 函數釋放內存。若在程序中沒有應? free( ) 函數或者 delete( ) 函數進?釋放操作,則內存會?直占?,直到程序結束。堆的特點是使?靈活,空間?較?。
4. 靜態(tài)區(qū)
????????靜態(tài)區(qū)?于保存?動全局變量和 static 變量。靜態(tài)區(qū)的內容在整個程序中都存在,由編譯器在編譯的時候分配內存。
三、總結
????????內存的分配管理?分重要,管理不當就會為程序帶來重?隱患。?般來說,內存可以理解為棧、堆和靜態(tài)區(qū)三部分。