Skip to content

Latest commit

 

History

History
47 lines (31 loc) · 1.16 KB

File metadata and controls

47 lines (31 loc) · 1.16 KB
Info

Example

#include <new>
static_assert(64u == std::hardware_destructive_interference_size); // x86-64

https://godbolt.org/z/haPq9583q

Puzzle

  • **Can you implement cache_aligned_array function which returns cache size aligned std::array with provided values?
constexpr auto cache_aligned_array(auto... args) {
    // TODO
    return std::array{args...};
};

static_assert(std::hardware_destructive_interference_size == alignof(cache_aligned_array(1, 2, 3)));

https://godbolt.org/z/EvKco4fG7

Solutions

constexpr auto cache_aligned_array(auto... args) {
    struct alignas(std::hardware_destructive_interference_size) 
      : decltype(std::array{args...}) { } array {args...};
    return array;
};

static_assert(std::hardware_destructive_interference_size == alignof(cache_aligned_array(1, 2, 3)));

https://godbolt.org/z/oTezYjsW4