用C++编写的Dmitry Vyukov优秀的有界MPMC队列
他添加了一些填充变量.我认为这是为了使其与缓存线对齐以提高性能.
我有几个问题要问.
- 为什么要这样做?
- 这是一种便携的方法吗 一如既往地工作
- 在什么情况下使用
__attribute__ ((aligned (64)))
最好呢? -
为什么在缓冲区指针之前填充会有助于提高性能?难道不只是指针加载到缓存中,所以它实际上只有指针的大小吗?
static size_t const cacheline_size = 64; typedef char cacheline_pad_t [cacheline_size]; cacheline_pad_t pad0_; cell_t* const buffer_; size_t const buffer_mask_; cacheline_pad_t pad1_; std::atomic<size_t> enqueue_pos_; cacheline_pad_t pad2_; std::atomic<size_t> dequeue_pos_; cacheline_pad_t pad3_;
在gcc for c代码下,这个概念会起作用吗?