日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
內(nèi)存溢出與內(nèi)存泄漏的解析

我們?cè)趯?shí)際編程中經(jīng)常會(huì)說(shuō)到內(nèi)存溢出和內(nèi)存泄漏,特別對(duì)于C/C++程序來(lái)說(shuō)(以下代碼示例均為C/C++),因?yàn)檫@時(shí)我們會(huì)跟內(nèi)存直接打交道。然而很多時(shí)候我們并不能完全搞明白這兩個(gè)概念,有時(shí)甚至?xí)⒍哳嵉够煜?/p>

成都創(chuàng)新互聯(lián)主要從事成都網(wǎng)站制作、成都網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)烏魯木齊,十年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來(lái)電咨詢建站服務(wù):18980820575

其實(shí)從命名上也能明白內(nèi)存溢出和內(nèi)存泄漏的大概,舉個(gè)可能并不恰當(dāng)?shù)睦?。好比是往水缸里打水,本?lái)這個(gè)缸只能裝下5桶水,第5桶裝完你還硬要裝第6桶,缸里的水自然就溢出來(lái)了,此為“內(nèi)存溢出”;缸里打滿水后并沒(méi)有人用,第二天發(fā)現(xiàn)缸里的水少了一半,第三天一滴不剩了,原來(lái)是缸底打了個(gè)洞忘補(bǔ)了(為什么要在缸底打洞呢?不為什么,好玩,任性)。這就好比是申請(qǐng)了一塊內(nèi)存忘記釋放了,造成了“內(nèi)存泄漏”。下面將簡(jiǎn)要解析一下這兩個(gè)概念。

首先說(shuō)說(shuō)內(nèi)存溢出,內(nèi)存溢出簡(jiǎn)單的說(shuō),即指要求分配的內(nèi)存超出了系統(tǒng)所能提供的,比如你申請(qǐng)了一個(gè)10字節(jié)的內(nèi)存空間,你硬要往里塞11字節(jié)大小的數(shù)據(jù),自然就滿了,溢出了嘛(如代碼示例1)。其實(shí)數(shù)組越界也是一種內(nèi)存溢出,比如寫(xiě)數(shù)據(jù)時(shí)超出了數(shù)組范圍(越界讀數(shù)組數(shù)據(jù)并不算內(nèi)存溢出)。數(shù)組填充越界以后,再往里塞的話,就會(huì)擠占棧內(nèi)存(一般數(shù)組聲明為局部變量,局部變量在棧區(qū)自動(dòng)分配內(nèi)存)。越界的部分被當(dāng)作局部變量占用棧內(nèi)存,因?yàn)闂J菑腞AM的底部往上長(zhǎng)(存數(shù)據(jù))的,而程序運(yùn)行的其他數(shù)據(jù)是從頂部往下的,所以當(dāng)棧越存越多,越積越高的時(shí)候,棧就會(huì)和程序運(yùn)行時(shí)的數(shù)據(jù)碰頭,二者占滿整個(gè)RAM內(nèi)存,此時(shí)棧再繼續(xù)消耗,棧再向上長(zhǎng),直接覆蓋掉程序運(yùn)行時(shí)所需的變量,程序就要跑飛了。這么看來(lái)內(nèi)存溢出也是很可怕的。

 
 
 
  1. void arr_test() 
  2.  { 
  3.     int arr[10]; 
  4.     arr[10] = 10; 

接著說(shuō)說(shuō)內(nèi)存泄漏,一般所說(shuō)的內(nèi)存泄漏是指堆內(nèi)存的泄漏(Heap leak),在對(duì)堆上動(dòng)態(tài)申請(qǐng)內(nèi)存,使用后未及時(shí)釋放,即會(huì)出現(xiàn)內(nèi)存泄漏。順帶說(shuō)一下,如果釋放了指針?biāo)竷?nèi)存,但是未立即將指針置為NULL,就會(huì)造成野指針(如代碼示例2)。一次內(nèi)存泄漏可能不會(huì)被察覺(jué),可能也不會(huì)有什么危害,但是內(nèi)存泄漏的累積會(huì)造成內(nèi)存用竭,那后果就嚴(yán)重了。比如內(nèi)存泄漏出現(xiàn)在循環(huán)體中。當(dāng)然還另有一些其他形式的內(nèi)存泄漏,如由于系統(tǒng)資源的泄漏(Resource leak )造成的內(nèi)存泄漏等等。根據(jù)內(nèi)存泄漏的發(fā)生頻率,一般內(nèi)存泄漏可分為以下4種:
常發(fā)性內(nèi)存泄漏;
偶發(fā)性內(nèi)存泄漏;
一次性內(nèi)存泄漏;
隱式內(nèi)存泄漏。

 
 
 
  1. 1 void heap-leap_test 
  2. 2 { 
  3. 3     char *p = (char *)malloc(sizeof(char)); 
  4. 4     //exe task 
  5. 5     free(p);//若不釋放指針p所指內(nèi)存空間,則會(huì)造成內(nèi)存泄漏。 
  6. 6    p = NULL;//若不置指針p為NULL,則p就會(huì)成為野指針。 
  7. 7 } 

網(wǎng)頁(yè)標(biāo)題:內(nèi)存溢出與內(nèi)存泄漏的解析
本文鏈接:http://m.5511xx.com/article/ccojios.html