Pebble Coding

ソフトウェアエンジニアによるIT技術、数学の備忘録

256bit(32バイト)にアラインされたメモリを取得する(C++17)

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

https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/Cocoa64BitGuide/OptimizingMemoryPerformance/OptimizingMemoryPerformance.html