<em id="0a85b"><option id="0a85b"></option></em>

<abbr id="0a85b"></abbr>

      <nobr id="0a85b"></nobr>
        <tr id="0a85b"></tr>
        9久久伊人精品综合,亚洲一区精品视频在线,成 人免费va视频,国产一区二区三区黄网,99国产精品永久免费视频,亚洲毛片多多影院,精品久久久无码人妻中文字幕,无码国产欧美一区二区三区不卡
        學習啦>知識大全>原因大全>

        內存泄露的原因

        時間: 曉賢752 分享

        內存泄漏是怎么回事?為什么會內存泄漏?內存泄露的原因是什么?下面就由學習啦小編告訴大家內存泄露的原因吧!

          內存泄漏是什么

          簡單的說就是申請了一塊內存空間,使用完畢后沒有釋放掉。它的一般表現方式是程序運行時間越長,占用內存越多,最終用盡全部內存,整個系統崩潰。由程序申請的一塊內存,且沒有任何一個指針指向它,那么這塊內存就泄露了。

          內存泄露的原因

          1.new,malloc后沒有delete,free

          2.創建內核對象(比如CreateFile,CreateMutex,CreateThread),后沒有釋放內核對象句柄.

          3.創建內存映射文件,CreateFileMapping,MapViewOfFile后沒有CloseHandle(),UnMapviewofFile

          4.創建GDI對象后,比如LoadIcon,LoadImage,CreateImageList等等,沒有Destroy掉

          5.創建DC后,比如GetDC(), 沒有釋放DC句柄

          6.保留虛擬地址空間 VirtualAlloc(),然后提交物理存儲器后,沒有釋放掉。

        內存泄漏的分類

          以發生的方式來分類,內存泄漏可以分為4類:

          (1). 常發性內存泄漏。

          發生內存泄漏的代碼會被多次執行到,每次被執行的時候都會導致一塊內存泄漏。

          (2). 偶發性內存泄漏。

          發生內存泄漏的代碼只有在某些特定環境或操作過程下才會發生。常發性和偶發性是相對的。對于特定的環境,偶發性的也許就變成了常發性的。所以測試環境和測試方法對檢測內存泄漏至關重要。

          (3). 一次性內存泄漏。

          發生內存泄漏的代碼只會被執行一次,或者由于算法上的缺陷,導致總會有一塊僅且一塊內存發生泄漏。比如,在類的構造函數中分配內存,在析構函數中卻沒有釋放該內存,所以內存泄漏只會發生一次。

          (4). 隱式內存泄漏。

          程序在運行過程中不停的分配內存,但是直到結束的時候才釋放內存。嚴格的說這里并沒有發生內存泄漏,因為最終程序釋放了所有申請的內存。但是對于一個服務器程序,需要運行幾天,幾周甚至幾個月,不及時釋放內存也可能導致最終耗盡系統的所有內存。所以,我們稱這類內存泄漏為隱式內存泄漏。

          內存泄漏的危害

          從用戶使用程序的角度來看,內存泄漏本身不會產生什么危害,作為一般的用戶,根本感覺不到內存泄漏的存在。真正有危害的是內存泄漏的堆積,這會最終消耗盡系統所有的內存。從這個角度來說,一次性內存泄漏并沒有什么危害,因為它不會堆積,而隱式內存泄漏危害性則非常大,因為較之于常發性和偶發性內存泄漏它更難被檢測到。

        內存泄漏的表現

          內存泄漏或者是說,資源耗盡后,系統會表現出什么現象哪?

          cpu資源耗盡:估計是機器沒有反應了,鍵盤,鼠標,以及網絡等等。這個在windows上經常看見,特別是中了毒。

          進程id耗盡:沒法創建新的進程了,串口或者telnet都沒法創建了。

          硬盤耗盡: 機器要死了,交換內存沒法用,日志也沒法用了,死是很正常的。

          內存泄漏或者內存耗盡:新的連接無法創建,free的內存比較少。發生內存泄漏的程序很多,但是要想產生一定的后果,就需要這個進程是無限循環的,是個服務進程。當然,內核也是無限循環的,所以,如果內核發生了內存泄漏,情況就更加不妙。內存泄漏是一種很難定位和跟蹤的錯誤,目前還沒看到有什么好用的工具(當然,用戶空間有一些工具,有靜態分析的,也會動態分析的,但是找內核的內存泄漏,沒有好的開源工具)

          內存泄漏和對象的引用計數有很大的關系,再加上c/c++都沒有自動的垃圾回收機制,如果沒有手動釋放內存,問題就會出現。如果要避免這個問題,還是要從代碼上入手,良好的編碼習慣和規范,是避免錯誤的不二法門。

          一般我們常說的內存泄漏是指堆內存的泄漏。

          堆內存是指程序從堆中分配的,大小任意的(內存塊的大小可以在程序運行期決定),使用完后必須顯示釋放的內存。

          應用程序一般使用malloc,realloc,new等函數從堆中分配到一塊內存,使用完后,程序必須負責相應的調用free或delete釋放該內存塊,否則,這塊內存就不能被再次使用,我們就說這塊內存泄漏了。

        724633 主站蜘蛛池模板: 精品无码国产不卡在线观看| 免费a级毛片18以上观看精品| 亚洲人成网站在小说| 亚洲欧美偷国产日韩| AV在线不卡观看免费观看| 国产成人高清精品亚洲一区 | 婷婷综合缴情亚洲| 亚洲欧美中文字幕5发布| 国产chinese男男gaygay网站| 波多结野衣一区二区三区| 激情六月丁香婷婷四房播| 亚洲综合一区无码精品| 中文字幕精品人妻av在线| 欧美日韩高清在线观看| 高清自拍亚洲精品二区| 日本特黄特色aaa大片免费| 国产精品中文字幕av| 成午夜精品一区二区三区| 不卡一区二区三区在线视频| 91青青草视频在线观看| 亚洲无人区一码二码三码| 国产亚洲制服免视频| 久久亚洲国产成人亚| 国产无套乱子伦精彩是白视频| 国产午夜精品视频免费不卡| 少妇被黑人到高潮喷出白浆| 国产午夜影视大全免费观看 | 四虎国产精品成人免费久久| AV无码不卡一区二区三区| 男人+高清无码+一区二区| 嫩草研究院久久久精品| 久久精品国产亚洲夜色AV网站| 亚洲国产精品日韩AV专区| 无码日韩做暖暖大全免费不卡| 亚洲日本中文字幕区| 久久月本道色综合久久| 强制高潮18xxxxhd日韩| 日本一区二区三区视频版| 国产精品无码在线看| 色综合久久综合香蕉色老大| 四虎影院176|