snmalloc 是一个研究性质的内存分配器。 其主要设计特点是:
依赖于 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 构建。
Snmalloc 依赖很少,包括 CMake, Ninja, Clang 6.0 以及一个 C++17 标准库。当前不推荐使用 GCC 编译,因为 GCC 在 COMDAT 中缺少对指定变量 selectany 属性的支持。但是可以在 GCC-7 中构建,但需要预先设置一些全局变量
selectany
构建调试配置:
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来用该分配器替代系统分配器,如下:
libsnmallocshim.so
LD_PRELOAD
LD_PRELOAD=/usr/local/lib/libsnmallocshim.so ninja
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.
snmalloc_lib