次の方法で共有


<new> typedefs

hardware_constructive_interference_size

inline constexpr size_t hardware_constructive_interference_size = implementation-defined;

解説

この数は、同時実行スレッドによって一時的な局所性でアクセスされる 2 つのオブジェクトによって占有される連続するメモリの最大推奨サイズです。 少なくとも alignof(max_align_t)である必要があります。

struct together {
    atomic<int> dog;
    int puppy;
};

struct kennel {
    // Other data members...
    alignas(sizeof(together)) together pack;
    // Other data members...
};

static_assert(sizeof(together) <= hardware_constructive_interference_size);

hardware_destructive_interference_size

inline constexpr size_t hardware_destructive_interference_size = implementation-defined;

解説

この数は、実装によって発生する競合によるパフォーマンスの低下を回避するために、同時にアクセスされる 2 つのオブジェクト間の最小推奨オフセットです。 少なくとも alignof(max_align_t)である必要があります。

struct keep_apart {
    alignas(hardware_destructive_interference_size) atomic<int> cat;
    alignas(hardware_destructive_interference_size) atomic<int> dog;
};

new_handler

new_handler型は、メモリを再利用または解放できる関数である、new handlerとして使用するのに適した関数を指します。

typedef void (*new_handler)();

解説

この型の関数が std::set_new_handler によって設定されている場合、その関数は operator new によって呼び出されるか、より多くのストレージの要求を満たさない場合に operator new[] されます。

戻り値として new_handler を使用する例については、 set_new_handlerを参照してください。