diff --git a/src/configure.in b/src/configure.in
index f07a8b299cf675f82a4c436a450ff821ac26f448..a7ed62c5c69822926545443da5a17bc0bca18029 100644
--- a/src/configure.in
+++ b/src/configure.in
@@ -4666,6 +4666,7 @@ AC_CHECK_FUNCS( \
  SetErrorMode \
  thread_info \
  host_get_clock_service \
+ posix_memalign \
 )
 
 # SunOS 4 realloc() returns NULL when reallocing NULL.
diff --git a/src/pike_memory.c b/src/pike_memory.c
index a6f1250619f546ba0d902250f339a677471ea955..2a250eef86bf2d1150c7658ca4f598b6916e3682 100644
--- a/src/pike_memory.c
+++ b/src/pike_memory.c
@@ -539,9 +539,17 @@ PMOD_EXPORT void *debug_xcalloc(size_t n, size_t s)
 PMOD_EXPORT void *aligned_alloc(size_t size, size_t alignment) {
     void * ret;
 
+    if (!size) return 0;
+
+#ifdef HAVE_POSIX_MEMALIGN
     if (posix_memalign(&ret, alignment, size)) {
 	Pike_error(msg_out_of_mem_2, size);
     }
+#else
+    if ((ret = memalign(alignment, size)) == NULL) {
+	Pike_error(msg_out_of_mem_2, size);
+    }
+#endif
 
     return ret;
 }