在用C++編寫 見梅德Vyukov的優秀界MPMC隊列:http://www.1024cores.net/home/lock-free-algorithms/queues/bounded-mpmc-queue如何以及何時對齊緩存行大小?
他補充一些填充變量。我認爲這是爲了使其與高速緩存線對齊以獲得性能。
我有一些問題。
- 爲什麼這樣做?
- 它是一個便攜式的方法,將 總是工作
- 在什麼情況下,這將是最好使用
__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_;
將根據海灣合作委員會這個概念適用於C代碼?
@Novelcrat - 好吧,這很有意義。那麼問題2和3呢? – Matt
@MattH:爲便於攜帶,C++ 11引入了'std :: aligned_storage',它允許您要求存儲已定義的大小和對齊方式。否則,'char [N]'的默認對齊方式爲'1'。 –
爲什麼鏈接器不優化填充變量如果不使用? – RishiD