2
我期待在該位文本在documentation爲Visual C++的_ReadWriteBarrier稟道:_ReadWriteBarrier如何傳播呼叫樹?
在Visual C++ 編譯器,_ReadWriteBarrier和 _WriteBarrier功能只在本地執行以前的版本並沒有影響 在呼叫樹上起作用。在Visual C++ 2005和更高版本的Visual 中,這些函數 在調用 樹時一直執行。
我明白了一個函數內的勢壘做什麼,但「調用樹」似乎暗示了一個功能foo()
調用函數bar()
可以知道bar()
是否包含屏障與否。在VC2005中實際上改變了什麼以實現......調用約定/ ABI,由編譯器完成的一些全局分析,還是什麼?
這也是我對MS文檔的理解。但是編譯器如何實現這種行爲呢?如果答案僅僅是所有非內聯函數調用都是編譯器重新排序的屏蔽,那麼爲什麼引用早期版本的VC沒有實現? – shojtsy 2010-04-23 06:16:17
我真的不知道。它可以用鏈接器解釋的屬性標記每個功能。這可能與它們在lib或至少在編譯過程中至少在對象字典中如何命名mangling或複雜的數據庫一樣簡單......但是,通常在過去的編譯器中,通常認爲它們無法看到的功能最差,因此不會圍繞它進行優化。也許他們變得更聰明,他們需要公開更多信息。 – tony 2010-04-24 02:34:25