pav*_*din 5 memory gcc atomic c++11
我分配了4096字节的共享内存.如何将其视为一个std::atomic<uint64_t>对象数组?
最终目标是将64位变量数组放到共享内存中,__sync_fetch_and_add并对这些变量执行(GCC内置).但我更喜欢使用原生C++ 11代码而不是使用GCC内置函数.那么如何将分配的内存用作std :: atomic对象?我应该placement new在512个计数器上调用吗?如果std::atomic构造函数在某些imeplement中需要额外的内存分配?我应该考虑std::atomic在共享内存中对齐对象吗?
对于 C++20,如果可以确保对象适当对齐,则可以使用std::atomic_ref 。对于 C++17 和任何更旧的版本, boost::atomic_ref 也可能有效,尽管我还没有测试过它。
如果您不想使用 Boost,那么内置编译器是唯一剩下的解决方案。在这种情况下,您应该更喜欢__atomic内置函数而不是旧__sync函数,如GCC 原子文档页面中所述。