精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

內存泄漏有什么影響

學益得智能硬件 ? 來源:學益得智能硬件 ? 2023-12-07 09:42 ? 次閱讀

用malloc申請的內存,沒有釋放,為什么程序也不會出錯?

最近有好幾位同學提出了這個問題。

講到C語言指針的時候,我們都會反復強調,malloc申請的堆內存,用完后一定要用free釋放掉,否則光申請不釋放,內存就會變的越來越少,這種現象就叫做內存泄漏。

泄漏到一定程度,沒有內存可用,程序可能就會奔潰。

很多同學在寫代碼的時候,經常忘記釋放內存,比如這段代碼:

#include


void test()
{
chat*s=(char*)malloc(sizeof(char)*1024 * 1024);
}


int main()
{
    test();
    
    return 0;
}

申請了1M堆內存,在程序的任何地方都沒有釋放。

運行程序后,一切正常,而且即使運行了很多遍,系統也沒有問題。

要解釋這個問題,就不得不提操作系統的內存管理。

不管是在 Linux 還是 Windows 下寫代碼,我們用的內存都是虛擬內存。

以 32 位 Linux 為例,每個進程啟動的時候,系統都會給他分配4個G的虛擬內存空間,分為用戶態和內核態,用戶態又分成了堆、棧、數據段、代碼段等等。

wKgZomVxIzuAdXqNAAiQ2d76vq4801.jpg

由于不同的進程使用的虛擬地址空間不同,所以即使程序出現了段錯誤,也就是進程本身異常退出,并不會影響其他程序的運行。

程序里面用malloc申請的就是堆空間這一段,如果程序一直在運行不會結束,并且一直在申請沒有釋放,那過一段時間后程序確實會奔潰。

但是我們學習的時候,更多的是一些測試程序,運行一下程序就結束。進程一旦結束,系統就會回收這段虛擬內存空間,對整個系統或者其他程序也不會產生什么影響。

平時寫一些測試程序,還是應該養成釋放的習慣,放在大型項目中,內存泄漏既有危害又難排查。

最后,給大家留一個問題,申請的堆內存,需要用free來釋放,那同一塊內存用free釋放兩次有沒有問題?

這個問題在學習的時候也是經常遇到,如果你在Linux下做開發,這個現象就是釋放兩次出現的:

wKgaomVxIzqAR84QAAHCstAd15U794.jpg

如果往上翻的話,還能看到double free字樣,所以,同樣的一塊堆內存,只能釋放一次。


審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • C語言
    +關注

    關注

    180

    文章

    7601

    瀏覽量

    136251
  • 程序
    +關注

    關注

    116

    文章

    3778

    瀏覽量

    80858
  • 指針
    +關注

    關注

    1

    文章

    480

    瀏覽量

    70512
  • 代碼
    +關注

    關注

    30

    文章

    4753

    瀏覽量

    68368
  • 內存泄漏
    +關注

    關注

    0

    文章

    39

    瀏覽量

    9206

原文標題:內存泄漏有什么影響

文章出處:【微信號:學益得智能硬件,微信公眾號:學益得智能硬件】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Linux內存泄漏檢測實現原理與實現

    在使用沒有垃圾回收的語言時(如 C/C++),可能由于忘記釋放內存而導致內存被耗盡,這叫 內存泄漏。由于內核也需要自己管理內存,所以也可能出
    發表于 12-09 11:11 ?961次閱讀

    錯誤910:進程內存不足

    REAL>錯誤引腳泄漏內存泄漏多大?它是每個錯誤幾k,還是它取決于錯誤的類型?如果它是一個小的內存
    發表于 10-15 07:52

    C++內存泄漏

    C++內存分配與釋放均由用戶代碼自行控制,靈活的機制有如潘多拉之盒,即讓程序員了更廣的發揮空間,也產生了代代相傳的內存泄漏問題。對于新手來說,最常
    發表于 09-15 17:39 ?16次下載

    內存泄漏的特點和類型

    內存的控制,因而造成了內存的浪費。內存泄漏與許多其他問題有著相似的癥狀,并且通常情況下只能由那些可以獲得程序源代碼的程序員才可以分析出來。然而,
    的頭像 發表于 06-20 10:58 ?2794次閱讀

    內存泄漏問題原理及檢視方法

    可能不少開發者都遇到過內存泄漏導致的網上問題,具體表現為單板在現網運行數月以后,因為內存耗盡而導致單板復位現象。一方面,內存泄漏問題屬于比較
    的頭像 發表于 10-10 10:42 ?2512次閱讀

    如何使用ThreadLocal來避免內存泄漏

    本次給大家介紹重要的工具ThreadLocal。講解內容如下,同時介紹什么場景下發生內存泄漏,如何復現內存泄漏,如何正確使用它來避免內存
    的頭像 發表于 08-20 09:29 ?4208次閱讀
    如何使用ThreadLocal來避免<b class='flag-5'>內存</b><b class='flag-5'>泄漏</b>

    【openssl】從openssl的常用接口淺談【內存泄漏

    使用openssl內存泄露風險嗎?從openssl的常用接口調用淺談【內存泄漏】的風險和規避。
    的頭像 發表于 08-31 11:24 ?3053次閱讀
    【openssl】從openssl的常用接口淺談【<b class='flag-5'>內存</b><b class='flag-5'>泄漏</b>】

    什么是內存泄漏內存泄漏哪些現象

    內存泄漏幾乎是很難避免的,不管是老手還是新手,都存在這個問題,甚至 Windows 與 Linux 這類系統軟件也或多或少存在著內存泄漏
    的頭像 發表于 09-05 17:24 ?9620次閱讀

    什么是內存泄漏?如何避免JavaScript內存泄漏

    JavaScript 代碼中常見的內存泄漏的常見來源: 研究內存泄漏問題就相當于尋找符合垃圾回收機制的編程方式,有效避免對象引用的問題。
    發表于 10-27 11:30 ?363次閱讀
    什么是<b class='flag-5'>內存</b><b class='flag-5'>泄漏</b>?如何避免JavaScript<b class='flag-5'>內存</b><b class='flag-5'>泄漏</b>

    內存泄漏如何避免

    的數,那就是內存溢出。 2. 內存泄漏 內存泄露 memory leak,是指程序在申請內存后,無法釋放已申請的
    的頭像 發表于 11-10 11:04 ?708次閱讀
    <b class='flag-5'>內存</b><b class='flag-5'>泄漏</b>如何避免

    內存泄漏會產生哪些后果

    內存泄漏原因 內存泄漏在C/C++這種不帶GC(Garbage Collection)的語言里,是一個經常發生的問題。因為沒有GC,所以分配的內存
    的頭像 發表于 11-10 15:06 ?762次閱讀
    <b class='flag-5'>內存</b><b class='flag-5'>泄漏</b>會產生哪些后果

    線程內存泄漏問題的定位

    記錄一個關于線程內存泄漏問題的定位過程,以及過程中的收獲。 1. 初步定位 是否存在內存泄漏:想到內存
    的頭像 發表于 11-13 11:38 ?585次閱讀
    線程<b class='flag-5'>內存</b><b class='flag-5'>泄漏</b>問題的定位

    內存溢出與內存泄漏:定義、區別與解決方案

    內存溢出與內存泄漏:定義、區別與解決方案? 內存溢出和內存泄漏是計算機科學中常見的問題,在開發和
    的頭像 發表于 12-19 14:10 ?2517次閱讀

    C語言內存泄漏問題原理

    內存泄漏問題只有在使用堆內存的時候才會出現,棧內存不存在內存泄漏問題,因為棧
    發表于 03-19 11:38 ?496次閱讀
    C語言<b class='flag-5'>內存</b><b class='flag-5'>泄漏</b>問題原理

    如何檢測內存泄漏

    檢測內存泄漏是軟件開發過程中一項至關重要的任務,它有助于識別和解決那些導致程序占用過多內存資源,從而影響程序性能甚至導致程序崩潰的問題。以下將詳細闡述幾種常見的內存
    的頭像 發表于 07-30 11:50 ?1589次閱讀