2012-11-06 35 views
2

假設我有一個模板函數處理指向尚未知類型的指針T。現在,如果類型T恰好是在64位的平臺void*那麼它必須是8字節對齊的,但是,如果T恰好是char它必須是1字節對齊的,並且如果T恰好是一個類,那麼其對齊要求,將取決於在其成員變量上。如何檢查類型指針是否正確對齊該類型?

這一切都可以在紙上計算,但是如何讓編譯器產生給定類型的對齊要求T

有沒有辦法在編譯期間找到給定類型的對齊要求?

+0

編譯器自動做到這一點!你想用這個做什麼? – BigBoss

+0

C++ 11中有'alignof'關鍵字。 – avakar

+0

@BigBoss:我正在使用自定義的分配器,我想確保它始終返回正確對齊的指針。 – sharptooth

回答

4

在C++ 11中,您可以使用alignofalignas進行斷言並提供對齊要求。另請參閱std::align以在運行時控制對齊。

2

在沒有C++ 11的情況下,最容易使用下一個冪次方塊大於或等於sizeof(T)。您可能還想將其限制爲最大基元的對齊方式。 8在64位體系結構上相當安全(儘管您可能需要密切關注SSE數據類型等)。

相關問題