Snmalloc内存分配器
snmalloc 是一个研究性质的内存分配器。 其主要设计特点是:
- 由分配它的同一线程释放的内存不需要任何同步操作。
- 在最初分配它的不同线程中释放内存,不占用任何锁,而是使用新颖的消息传递方案将内存返回到原始分配器,在那里它被回收。
- 分配器使用大范围的页面来减少所需的元数据量。
在 Windows 中构建
依赖于 Visual Studio 2017.
mkdir build
cd build
cmake -G "Visual Studio 15 2017 Win64" ..
cmake --build . --config Debug
cmake --build . --config Release
cmake --build . --config RelWithDebInfo
如果是在 IDE 中操作的话,你可以忽视最后三步。Visual Studio 构建使用一个独立的目录来为每个构建配置保存二进制文件。
此外你可以参考下一部分内容来使用 Visual Studio 编译器和 Ninja 构建。
在 Mac OS X 、Linux 和 FreeBSD 中构建
Snmalloc 依赖很少,包括 CMake, Ninja, Clang 6.0 以及一个 C++17 标准库。当前不推荐使用 GCC 编译,因为 GCC 在 COMDAT 中缺少对指定变量 selectany
属性的支持。但是可以在 GCC-7 中构建,但需要预先设置一些全局变量
构建调试配置:
mkdir build
cd build
cmake -G Ninja .. -DCMAKE_BUILD_TYPE=Debug
ninja
构建发行配置:
mkdir build
cd build
cmake -G Ninja .. -DCMAKE_BUILD_TYPE=Release
ninja
开启优化器,但包含调试配置:
mkdir build
cd build
cmake -G Ninja .. -DCMAKE_BUILD_TYPE=RelWithDebInfo
ninja
在 ELF 平台上,上述构建将生成一个二进制文件 libsnmallocshim.so
。这个文件可以使用 LD_PRELOAD
来用该分配器替代系统分配器,如下:
LD_PRELOAD=/usr/local/lib/libsnmallocshim.so ninja
CMake Feature Flags
These can be added to your cmake command line.
-DUSE_SNMALLOC_STATS=ON // Track allocation stats
-DUSE_MEASURE=ON // Measure performance with histograms
The project can be included in other CMake projects as a header only library:
set(SNMALLOC_ONLY_HEADER_LIBRARY ON)
add_subdirectory([...]/snmalloc EXCLUDE_FROM_ALL)
This has a single build target snmalloc_lib
, which includes the necessary compiler and linker flags, to use snmalloc as a header-only library.
评论