日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > linux >内容正文

linux

linux内存分配缺陷,Linux系统优化-内存错误分析

發(fā)布時(shí)間:2025/3/15 linux 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux内存分配缺陷,Linux系统优化-内存错误分析 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

造成內(nèi)存錯(cuò)誤的樣例分析

例一:(釋放代碼段空間導(dǎo)致內(nèi)存錯(cuò)誤)

圖1 ?Coding

運(yùn)行錯(cuò)誤顯示:

圖2內(nèi)存錯(cuò)誤顯示

分析:如圖2所示運(yùn)行后出現(xiàn)內(nèi)存錯(cuò)誤,free(): invalid pointer: 0x08048540 ***。打印出指針P的地址可以看出如圖3,P的地址發(fā)生了變化,通過(guò)malloc分配的指針P地址在堆區(qū),但是經(jīng)過(guò)字符串給P再賦值后,P的地址變成了代碼段存放的地址

圖3指針P的地址

圖4進(jìn)程運(yùn)行內(nèi)存顯示

釋放了一個(gè)代碼段的內(nèi)存就導(dǎo)致了內(nèi)存的錯(cuò)誤,并非堆內(nèi)存。

樣例二(釋放沒(méi)有申請(qǐng)空間的指針導(dǎo)致內(nèi)存錯(cuò)誤)

圖5 Coding

內(nèi)存錯(cuò)誤顯示

圖6內(nèi)存錯(cuò)誤顯示

分析:如圖6所示,運(yùn)行后內(nèi)存錯(cuò)誤顯示。如圖7所示聲明并定義一個(gè)char? *p,并未為其分配空間,打印P的地址可以看出位于第一個(gè)動(dòng)態(tài)鏈接庫(kù)加載的地址處。改指針并未申請(qǐng)空間。

圖7指針P地址

圖8進(jìn)程運(yùn)行內(nèi)存顯示

樣例三 (釋放已經(jīng)釋放的指針)

圖9 Coding

圖10運(yùn)行錯(cuò)誤顯示

分析:錯(cuò)誤提示double free corruption (fasttop):0x09303008,即釋放了一個(gè)已經(jīng)釋放了的內(nèi)存空間。

樣例四(釋放了棧空間變量)

圖11 ?Coding

圖12內(nèi)存錯(cuò)誤

分析:聲明了一個(gè)int指針,并將變量a的地址賦予P,然后釋放P的空間。由上圖分析可得,P的地址為0xbfe6ec5c,通過(guò)顯示的Memory map可以看出,p指向的是??臻g。由于free了??臻g,導(dǎo)致了內(nèi)存錯(cuò)誤。

內(nèi)存泄露原因

內(nèi)存泄露通常分為四類(lèi):(根據(jù)發(fā)生的方式)

1.常發(fā)性?xún)?nèi)存泄露。造成內(nèi)存泄露的代碼會(huì)被多次執(zhí)行,每次代碼被執(zhí)行時(shí)都會(huì)導(dǎo)致一塊內(nèi)存泄露。

2.偶發(fā)性?xún)?nèi)存泄露。造成內(nèi)存泄露的代碼只有在某種特定環(huán)境或操作下才會(huì)發(fā)生。常發(fā)性和偶發(fā)性是相對(duì)的。對(duì)于特定的環(huán)境,偶發(fā)性也許就變成了常發(fā)性。所以測(cè)試環(huán)境和測(cè)試方法對(duì)檢測(cè)內(nèi)存泄露至關(guān)重要。

3.一次性?xún)?nèi)存泄露。造成內(nèi)存泄露的代碼只會(huì)被執(zhí)行一次,或者由于算法上的缺陷,導(dǎo)致總會(huì)有一塊僅且只有一塊內(nèi)存發(fā)生泄露

4.隱式內(nèi)存泄露。程序在運(yùn)行過(guò)程中不斷地分配內(nèi)存,但是直到結(jié)束時(shí)候才釋放內(nèi)存。確切地說(shuō)這里并沒(méi)有發(fā)生內(nèi)存泄露,因?yàn)槌绦蜃罱K釋放了所有申請(qǐng)的內(nèi)存。但是對(duì)于一個(gè)服務(wù)器程序來(lái)說(shuō)需要需要長(zhǎng)時(shí)間連續(xù)不間斷運(yùn)行,有時(shí)幾個(gè)月甚至幾年。如果不及時(shí)釋放內(nèi)存可能會(huì)導(dǎo)致最終耗盡系統(tǒng)的所有內(nèi)存。

堆內(nèi)存優(yōu)化

1.堆內(nèi)存最小單位為16字節(jié)所以應(yīng)盡量減少小塊內(nèi)存的申請(qǐng),避免內(nèi)存浪費(fèi)

2.調(diào)整M_MMAP_THRESHOLD,降低mmap的門(mén)檻,會(huì)降低內(nèi)存空洞的風(fēng)險(xiǎn),但也會(huì)增加系統(tǒng)調(diào)用,降低性能。

3.調(diào)整M_TRIM_THRESHOLD,減少堆頂連續(xù)內(nèi)存門(mén)檻,釋放更多的堆頂內(nèi)存。

總結(jié)

以上是生活随笔為你收集整理的linux内存分配缺陷,Linux系统优化-内存错误分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。