溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

segmentationfault產(chǎn)生的可能情況是什么

發(fā)布時(shí)間:2021-09-22 13:37:30 來源:億速云 閱讀:98 作者:小新 欄目:開發(fā)技術(shù)

小編給大家分享一下segmentationfault產(chǎn)生的可能情況是什么,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

  所謂的段錯(cuò)誤就是指訪問的內(nèi)存超出了系統(tǒng)所給這個(gè)程序的內(nèi)存空間,通常這個(gè)值是由gdtr來保存的,他是一個(gè)48位的寄存器,其中的32位是保存由它指向的gdt表,后13位保存相應(yīng)于gdt的下標(biāo),最后3位包括了程序是否在內(nèi)存中以及程序的在cpu中的運(yùn)行級(jí)別,指向的gdt是由以64位為一個(gè)單位的表,在這張表中就保存著程序運(yùn)行的代碼段以及數(shù)據(jù)段的起始地址以及與此相應(yīng)的段限和頁面交換還有程序運(yùn)行級(jí)別還有內(nèi)存粒度等等的信息。一旦一個(gè)程序發(fā)生了越界訪問,cpu就會(huì)產(chǎn)生相應(yīng)的異常保護(hù),于是segmentationfault就出現(xiàn)了。

  什么是“SegmentationfaultinLinux”

  即“當(dāng)程序試圖訪問不被允許訪問的內(nèi)存區(qū)域(比如,嘗試寫一塊屬于操作系統(tǒng)的內(nèi)存),或以錯(cuò)誤的類型訪問內(nèi)存區(qū)域(比如,嘗試寫一塊只讀內(nèi)存)。這個(gè)描述是準(zhǔn)確的。為了加深理解,我們?cè)俑釉敿?xì)的概括一下SIGSEGV。段錯(cuò)誤應(yīng)該就是訪問了不可訪問的內(nèi)存,這個(gè)內(nèi)存區(qū)要么是不存在的,要么是受到系統(tǒng)保護(hù)的。

  ?SIGSEGV是在訪問內(nèi)存時(shí)發(fā)生的錯(cuò)誤,它屬于內(nèi)存管理的范疇

  ?SIGSEGV是一個(gè)用戶態(tài)的概念,是操作系統(tǒng)在用戶態(tài)程序錯(cuò)誤訪問內(nèi)存時(shí)所做出的處理。

  ?當(dāng)用戶態(tài)程序訪問(訪問表示讀、寫或執(zhí)行)不允許訪問的內(nèi)存時(shí),產(chǎn)生SIGSEGV。

  ?當(dāng)用戶態(tài)程序以錯(cuò)誤的方式訪問允許訪問的內(nèi)存時(shí),產(chǎn)生SIGSEGV。

  用戶態(tài)程序地址空間,特指程序可以訪問的地址空間范圍。如果廣義的說,一個(gè)進(jìn)程的地址空間應(yīng)該包括內(nèi)核空間部分,只是它不能訪問而已

  segmentationfault產(chǎn)生的可能情況

  指針越界和SIGSEGV是最常出現(xiàn)的情況,經(jīng)??吹接刑影褍烧呋煜?,而這兩者的關(guān)系也確實(shí)微妙。在此,我們把指針運(yùn)算(加減)引起的越界、野指針、空指針都?xì)w為指針越界。SIGSEGV在很多時(shí)候是由于指針越界引起的,但并不是所有的指針越界都會(huì)引發(fā)SIGSEGV。一個(gè)越界的指針,如果不解引用它,是不會(huì)引起SIGSEGV的。而即使解引用了一個(gè)越界的指針,也不一定會(huì)引起SIGSEGV。這聽上去讓人發(fā)瘋,而實(shí)際情況確實(shí)如此。SIGSEGV涉及到操作系統(tǒng)、C庫、編譯器、鏈接器各方面的內(nèi)容,我們以一些具體的例子來說明。

以上是“segmentationfault產(chǎn)生的可能情況是什么”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI