我目前正在嘗試構建一個代碼,該代碼適用於各種機器,從手持式口袋和傳感器到數據中心中的大型服務器。檢測目標CPU上對齊的內存要求
這些體系結構之間的(許多)差異之一是對齊內存訪問的要求。
「標準」x86 CPU上不需要對齊內存訪問,但許多其他CPU需要它,並且在不遵守規則時會產生異常。
到目前爲止,我一直在通過使用packed屬性(或pragma)強制編譯器對已知有風險的特定數據訪問進行謹慎處理。它工作正常。
問題是,編譯器非常謹慎,以至於在這個過程中大量的性能丟失了。因爲性能很重要,所以我們最好重寫代碼的某些部分以專門處理嚴格對齊的cpus。另一方面,這樣的代碼在支持未對齊內存訪問的cpus(比如x86)上會更慢,所以我們希望在需要嚴格對齊內存訪問的cpus上使用它只有。
現在問題: 如何在編譯時檢測到目標架構需要嚴格對齊的內存訪問? (或其他方式)
有趣。這確實是我開始這樣做的方式,但顯然,我不知道所有的架構在那裏......順便說一句,沒有不幸的是,我沒有「直接」訪問所有這些架構,所以我必須猜測提前解決大部分問題,以避免在代碼維護階段出現太多併發症。 – Cyan 2012-02-18 00:52:31
您無法瞭解所有架構,但聲稱支持您無法訪問的架構是不負責任的,至少如果您正在編寫C語言。 – 2012-02-18 01:55:02
我完全同意。我的目標主要是爲其他人定製軟件包,以便爲其自己的目標架構進行定製。準備得越好,下游越容易。但正如你所說,我不能「聲稱」完全驗證它。儘管如此,與「我不在乎」相比,優秀的軟件設計仍然具有優勢。 – Cyan 2012-02-20 10:03:09