Редагувати

Поділитися через


<new> typedefs

hardware_constructive_interference_size

inline constexpr size_t hardware_constructive_interference_size = implementation-defined;

Remarks

This number is the maximum recommended size of contiguous memory occupied by two objects accessed with temporal locality by concurrent threads. It must be at least alignof(max_align_t).

Example

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;

Remarks

This number is the minimum recommended offset between two concurrently accessed objects to avoid performance degradation due to contention introduced by the implementation. It must be at least alignof(max_align_t).

Example

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

new_handler

The new_handler type points to a function suitable for use as a new handler, a function that can reclaim or release memory.

typedef void (*new_handler)();

Remarks

When of function of this type is set by std::set_new_handler, the function is called by operator new or operator new[] when they can't satisfy a request for more storage.

Example

For an example that uses new_handler as a return value, see set_new_handler.