diff --git a/include/eigenpy/alignment.hpp b/include/eigenpy/alignment.hpp
index bb888b8dc54dc1c20989861746ee94f5e166b02e..4bca14d36954ab744cde25a23ba4cb55f3ea95da 100644
--- a/include/eigenpy/alignment.hpp
+++ b/include/eigenpy/alignment.hpp
@@ -9,6 +9,7 @@
 #include <boost/python/converter/arg_from_python.hpp>
 #include <boost/python/converter/rvalue_from_python_data.hpp>
 #include <boost/type_traits/aligned_storage.hpp>
+#include <eigenpy/utils/is-aligned.hpp>
 
 namespace eigenpy {
 
@@ -33,6 +34,7 @@ inline void *aligned_malloc(
     std::size_t size, std::size_t alignment = EIGENPY_DEFAULT_ALIGN_BYTES) {
   void *original = std::malloc(size + alignment);
   if (original == 0) return 0;
+  if (is_aligned(original, alignment)) return original;
   void *aligned =
       reinterpret_cast<void *>((reinterpret_cast<std::size_t>(original) &
                                 ~(std::size_t(alignment - 1))) +