C++17以上ではnewでアラインされたメモリを簡単に取得できるようになりました。
for (int i = 0; i < 10000; ++i) { float* a = new (std::align_val_t{32}) float; auto val = reinterpret_cast<size_t>(a); if ((val % 32) != 0) { assert(false); } }
余談ですが64bit環境のWindows VC++ではnewは16バイト、 macOS10.6以上の64bit環境のmallocでは16バイトにアラインされるようです。
https://docs.microsoft.com/ja-jp/cpp/c-runtime-library/reference/malloc?view=msvc-170