cacheline 優化

今天看rockdb的代碼, 看到整個程序在分配內存和釋放的內存的時候,並不是直接用的malloc 或者 new 等,而是使用cacheline_aligned_alloc,瞭解了一下相關原理,內存load到緩存的時候 ,是按照cacheline大小load到緩存的,所以進行分配內存的時候,儘量按照cacheline大小進行分配,這樣訪問一個結構體就是訪問一個cacheline,這些細節可以使得程序可能更快吧。把代碼貼上,以後分配內存直接用這個代碼分配。


void *cacheline_aligned_alloc(size_t size) {
#if __GNUC__ < 5 && defined(__SANITIZE_ADDRESS__)
  return malloc(size);
#elif ( _POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600 || defined(__APPLE__))
  void *m;
  errno = posix_memalign(&m, CACHE_LINE_SIZE, size);
  return errno ? nullptr : m;
#else
  return malloc(size);
#endif
}


void cacheline_aligned_free(void *memblock) {
  free(memblock);
}

發佈了46 篇原創文章 · 獲贊 1 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章