<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 總線錯誤和段錯誤相關(guān)概念

          總線錯誤和段錯誤相關(guān)概念

          作者: 時間:2016-12-15 來源:網(wǎng)絡(luò) 收藏
          在UNIX上編程時,經(jīng)常會遇到如下兩個常見的運(yùn)行時錯誤:

          buserror總線錯誤

          本文引用地址:http://www.ex-cimer.com/article/201612/330343.htm

          segmentationfault段錯誤

          總線錯誤

          總線錯誤幾乎都是由于未對齊的讀或?qū)懺斐傻摹K苑Q為總線錯誤,是因?yàn)槌霈F(xiàn)未對齊的內(nèi)存訪問請求時,被堵塞的組件就是地址總線。對齊的意思就是數(shù)據(jù)項(xiàng)只能存儲在地址是數(shù)據(jù)項(xiàng)大小的整數(shù)倍的內(nèi)存位置上。在現(xiàn)代的計算機(jī)架構(gòu)中,尤其是RISC架構(gòu),都需要數(shù)據(jù)對齊,因?yàn)榕c任意的對齊有關(guān)的額外邏輯會使整個內(nèi)存系統(tǒng)更大且更慢。通過迫使每個內(nèi)存訪問局限在一個cache行或一個單獨(dú)的頁面內(nèi),可以極大地簡化如cache控制器或內(nèi)存管理單元這樣的硬件。

          我們表達(dá)“數(shù)據(jù)項(xiàng)不能跨越頁面或cache邊界”規(guī)則的方法多少有些間接,因?yàn)槲覀冇玫刂穼R這個術(shù)語來陳述這個問題,而不是直截了當(dāng)說是禁止內(nèi)存跨頁訪問,但它們說的是同一回事。例如,訪問一個8字節(jié)的double數(shù)據(jù)時,地址只允許是8的整數(shù)倍。所以一個double數(shù)據(jù)可以存儲于地址24、8008、32768,但不能存儲于地址1006,頁和cache的大小是經(jīng)過精心設(shè)計的,這樣只要遵守對齊規(guī)則就可以保證一個原子數(shù)據(jù)項(xiàng)不會跨越一個頁或cache塊的邊界。

          段錯誤

          段錯誤通常是由于解除引用一個未初始化或非法值的指針引起的。以發(fā)生頻率為序,最終可能導(dǎo)致段錯誤的常見編程錯誤是:

          1、壞指針錯誤:在指針賦值之前就用它來引用內(nèi)存;或者向庫函數(shù)傳遞一個壞指針(如果調(diào)試器顯示系統(tǒng)程序中出現(xiàn)了段錯誤,很可能并不是系統(tǒng)程序引起的段錯誤,問題可能就出現(xiàn)在自己的代碼中);或者指針被釋放后還繼續(xù)訪問它的內(nèi)容。

          2、改寫錯誤:越過數(shù)組邊界寫入數(shù)據(jù),在動態(tài)分配的內(nèi)存空間以外寫入數(shù)據(jù),或改寫一些堆管理數(shù)據(jù)結(jié)構(gòu)(在動態(tài)分配的內(nèi)存之前的區(qū)域?qū)懭霐?shù)據(jù)就很容易發(fā)生這種情況)。

          3、指針釋放引起的錯誤:釋放同一塊內(nèi)存兩次,或釋放一塊未曾使用malloc分類的內(nèi)存,或釋放一個無效的指針。一個極為常見的與釋放內(nèi)存有關(guān)的錯誤就是在for(p=start;p;p=p->next)這樣的循環(huán)中迭代一個鏈表,并在循環(huán)體內(nèi)使用free(p)這樣的語句。這樣,在下一次循環(huán)迭代時,程序就會對已經(jīng)釋放的指針進(jìn)行解除引用操作,從而導(dǎo)致不可預(yù)料的結(jié)果。



          關(guān)鍵詞: 總線錯誤段錯

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();