2013-10-02 43 views
-1

這個問題可能很愚蠢,但我會問它。
我從this Mysticial的回答
聽說了分支預測,我想知道是否有可能爲以下情況發生科錯誤預測

可以說我有這一塊的C++代碼

while(memoryAddress = getNextAddress()){ 

    if(haveAccess(memoryAddress)) 
    // change the value of *memoryAdrress 
    else 
    // do something else 

} 

所以如果分支預測器在某些情況下預測錯誤,那麼if語句爲true,然後程序更改* memoryAddress的值會不會發生這種情況? 可以發生分段故障嗎?

回答

3

處理器內部的分支預測器被設計爲沒有功能可觀察的效果。

分支預測器並不足夠複雜,無論每次嘗試如何欺騙它都無妨。如果每次都是正確的,那就是分支總是如何執行的,它不會是一個「預測器」。

當執行繼續時,仍然計算分支的條件,如果條件結果不具有預測值,則不會將任何內容提交到內存。執行返回到正確的分支。

+0

我明白,分支預測器無法正確地得到它的正確以及分支預測器如何工作的一般想法。 我想知道你所描述的那部分「被設計爲沒有功能上可觀察到的效果」 –

+0

@LanPac對於我來說,我不認爲你想知道分支投機是如何工作的。這是非常行人,如果預測是一個簡單的1位事務,它不會改變討論。您似乎想知道投機性執行是如何運作的(如果您沒有深入細節,這也是行人)。正如我多多少少說的那樣,「如果事實證明這項工作畢竟不需要,工作所做的任何改變都會得到回覆,結果將被忽略。」http://en.wikipedia.org/wiki/Speculative_execution –