+/// Wrappers for systems where the c++17 implementation doesn't guarantee the availability of aligned_alloc.
+/// Memory allocated with std_aligned_alloc must be freed with std_aligned_free.
+///
+
+void* std_aligned_alloc(size_t alignment, size_t size) {
+#if defined(__APPLE__)
+ return aligned_alloc(alignment, size);
+#elif defined(_WIN32)
+ return _mm_malloc(size, alignment);
+#else
+ return std::aligned_alloc(alignment, size);
+#endif
+}
+
+void std_aligned_free(void* ptr) {
+#if defined(__APPLE__)
+ free(ptr);
+#elif defined(_WIN32)
+ _mm_free(ptr);
+#else
+ free(ptr);
+#endif
+}