第7章,對內存的思考

進程的虛擬內存缺頁中斷(可能段違規(guī))

、

判斷該引用是否有效是看該頁面是不是通過正常手段聲明要使用的,例如malloc申請,就會發(fā)生正常的缺頁中斷。而隨意在malloc后面的內存空間進行訪問,可能就會發(fā)生段違規(guī)(因為mallo的內存是一塊一塊的分配的,也許后面挨著的地址那塊已經分配給進程了)。

數(shù)據(jù)段和堆(heap)

原來堆是屬于數(shù)據(jù)段的,位于數(shù)據(jù)段的頂部,而且堆是可以動態(tài)變化大小的。

內存泄漏

程序結束的時候,其內存就會被釋放的,所以一些不會長時間駐留的程序不用考慮那內存回收等問題。然而一些

生存世家較長的程序,如日歷管理器,郵件工具等程序,需要我們詳細斟酌動態(tài)內存的分配和回收。因為C語言沒有java那樣的垃圾收集器(自動確認并回收不再使用的內存塊)。這些程序,在使用malloc和free的時候需要非常謹慎。堆經常會出現(xiàn)兩種類型的問題。

釋放或改寫仍在使用的內存(稱為“內存損壞”)

未釋放不再使用的內存(稱為“內存泄漏”)

如何檢測內存泄漏

總線錯誤,段違規(guī)

另外總線錯誤和段錯誤的準確原因在不同的操作系統(tǒng)版本上各不相同,歸根結底這兩種錯誤都是硬件告訴操作系統(tǒng)一個有問題的內存引用造成的。在缺省情況下,進程在收到“總線錯誤”或“段錯誤”信號后將進行信息轉儲并終止。所以一般會出現(xiàn)core dump的提示,之所以這里是core,是因為很久以前內存的材料是鐵氧化物圓環(huán)(core)。

總線錯誤

段錯誤

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 第六章 內存管理 作者:Allen B. Downey 原文:Chapter 6 Memory manageme...
    布客飛龍閱讀 583評論 0 38
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,554評論 19 139
  • C語言中內存分配 在任何程序設計環(huán)境及語言中,內存管理都十分重要。在目前的計算機系統(tǒng)或嵌入式系統(tǒng)中,內存資源仍然是...
    一生信仰閱讀 1,310評論 0 2
  • 第一章 簡介 J2SE平臺的一大優(yōu)勢是它的自動化內存管理,避免了開發(fā)者去面對內存管理的復雜性。 本文以Sun J2...
    tianyiliusha閱讀 1,073評論 0 1
  • 這是貓叔行動營成員“也知也非”文章里的一部分。 普通人會寫不是夢,少“自嗨”,多“利他”,先完成,再完美。很多人都...
    希文啊閱讀 652評論 2 9

友情鏈接更多精彩內容