[type_traits] type_with_alignment<64> on gcc

Hi,
Is there any particular reason that type_with_alignment does not support
alignment more than 32 on gcc?
I am trying to create an unordered_map of objects that are aligned to
cache line size (64bytes) and it fails in type_with_alignment. This
small example shows it:
#include

Is there any particular reason that type_with_alignment does not support alignment more than 32 on gcc?
None except there has to be a limit somewhere. The patch below enables up to 128-byte alignment, which matches what we do with MSVC. The patch should be in Trunk shortly as well. HTH, John. Index: type_with_alignment.hpp =================================================================== --- type_with_alignment.hpp (revision 76120) +++ type_with_alignment.hpp (working copy) @@ -225,6 +225,8 @@ struct __attribute__((__aligned__(8))) a8 {}; struct __attribute__((__aligned__(16))) a16 {}; struct __attribute__((__aligned__(32))) a32 {}; +struct __attribute__((__aligned__(64))) a64 {}; +struct __attribute__((__aligned__(128))) a128 {}; } template<> class type_with_alignment<1> { public: typedef char type; }; @@ -233,6 +235,8 @@ template<> class type_with_alignment<8> { public: typedef align::a8 type; }; template<> class type_with_alignment<16> { public: typedef align::a16 type; }; template<> class type_with_alignment<32> { public: typedef align::a32 type; }; +template<> class type_with_alignment<64> { public: typedef align::a64 type; }; +template<> class type_with_alignment<128> { public: typedef align::a128 type; }; namespace detail { BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::align::a2,true) @@ -240,6 +244,8 @@ BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::align::a8,true) BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::align::a16,true) BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::align::a32,true) +BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::align::a64,true) +BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::align::a128,true) } #endif #if (defined(BOOST_MSVC) || (defined(BOOST_INTEL) && defined(_MSC_VER))) && _MSC_VER >= 1300

On 01/04/2012 06:51 AM, John Maddock wrote:
Is there any particular reason that type_with_alignment does not support alignment more than 32 on gcc?
None except there has to be a limit somewhere. The patch below enables up to 128-byte alignment, which matches what we do with MSVC. The patch should be in Trunk shortly as well.
HTH, John.
Thanks, tried it and works fine!
participants (2)
-
Ioannis Papadopoulos
-
John Maddock