diff --git a/include/eigenpy/memory.hpp b/include/eigenpy/memory.hpp index 447694e419dba3db69f1e0e13bb4cb578a8ab0a7..3e826ae30bf7b2dc13d4ee61ac5cd0b2fc3c2803 100644 --- a/include/eigenpy/memory.hpp +++ b/include/eigenpy/memory.hpp @@ -15,6 +15,12 @@ static inline void _Py_SET_SIZE(PyVarObject* ob, Py_ssize_t size) { #define Py_SET_SIZE(ob, size) _Py_SET_SIZE((PyVarObject*)(ob), size) #endif +#if EIGEN_DEFAULT_ALIGN_BYTES > 16 +#define EIGENPY_DEFAULT_ALIGN_BYTES EIGEN_DEFAULT_ALIGN_BYTES +#else +#define EIGENPY_DEFAULT_ALIGN_BYTES 16 +#endif + /** * This section contains a convenience MACRO which allows an easy specialization * of Boost Python Object allocator for struct data types containing Eigen @@ -42,7 +48,7 @@ static inline void _Py_SET_SIZE(PyVarObject* ob, Py_ssize_t size) { \ union { \ align_t align; \ - char bytes[sizeof(Data) + 16]; \ + char bytes[sizeof(Data) + EIGENPY_DEFAULT_ALIGN_BYTES]; \ } storage; \ }; \ \ @@ -96,7 +102,9 @@ static inline void _Py_SET_SIZE(PyVarObject* ob, Py_ssize_t size) { void* storage, PyObject* instance, \ reference_wrapper<__VA_ARGS__ const> x) { \ void* aligned_storage = reinterpret_cast<void*>( \ - (reinterpret_cast<size_t>(storage) & ~(size_t(15))) + 16); \ + (reinterpret_cast<size_t>(storage) & \ + ~(size_t(EIGENPY_DEFAULT_ALIGN_BYTES - 1))) + \ + EIGENPY_DEFAULT_ALIGN_BYTES); \ value_holder<__VA_ARGS__>* new_holder = \ new (aligned_storage) value_holder<__VA_ARGS__>(instance, x); \ return new_holder; \