有沒有辦法讓Clang,GCC或Visual Studio在內存訪問不對齊時發出運行時警告,最好還會發出源代碼位置?在未對齊的內存訪問上發出警告?
我需要找到包含未對齊訪問的巨大遺留源(我沒有自己編寫)中的所有點,然後將它們明確地包裝在過濾器中,這使它們對齊。
我需要這個將源代碼移植到會在未對齊訪問時破解的平臺。
有沒有辦法讓Clang,GCC或Visual Studio在內存訪問不對齊時發出運行時警告,最好還會發出源代碼位置?在未對齊的內存訪問上發出警告?
我需要找到包含未對齊訪問的巨大遺留源(我沒有自己編寫)中的所有點,然後將它們明確地包裝在過濾器中,這使它們對齊。
我需要這個將源代碼移植到會在未對齊訪問時破解的平臺。
GCC有the -Wcast-align option。但是,它會引發編譯時警告,而不是運行時警告,因爲編譯器無法引發運行時警告或錯誤。
如果您需要更多信息,我建議您閱讀this SO question,其中討論了未對齊的內存。
編輯:增加了關於GCC提高編譯時間而不是運行時警告的部分。
代碼是否有很多#pragma pack指令?他們是主要原因。 – cup
您無法確定您的目標編譯器佈局結構或數據元素是否與您的pc編譯器一樣。那麼這個警告的價值是什麼? –
「編譯器發出運行時警告」嗎?這應該如何工作? –