再开源一款轻量内存池

前两天已开源线程池,开源一款轻量线程池项目,本节继续开源另一个孪生兄弟:内存池。

本节的线程池与内存池代码解析会在我的星球详细讲解。

内存池:https://github.com/Light-City/light-memory-pool

线程池:https://github.com/Light-City/light-thread-pool

基于Arrow的轻量内存池

这个项目的内存池是基于Apache Arrow项目的衍生版本。我们将Arrow项目中复杂的核心结构------内存池------完全剥离出来,形成了这个独立的项目。由于原始的内存池与Arrow项目本身的工具有深度依赖关系,因此我们在这个项目中对内存池进行了一些深度移除和改造,以保持与原始Arrow内存池的基础功能一致。一些改动包括:

  • 分离allocator与memory_pool

  • 移除不需要的LoggingMemoryPool、ProxyMemoryPool

  • 移除jemalloc等第三方malloc库,未来可以支持

通过这些改动,我们的目标是:

  • 使代码更加精简

  • 使内存池更方便地作为其他项目的依赖库使用

  • 提供简单的方式来引入本项目的so库和头文件,以使用内存池功能

此外,这个项目还可以作为深入学习内存池设计与实现的资源。我们欢迎您探索并使用这个经过精心改进的内存池。

1.如何编译

go 复制代码
➜  bazel build //src:memory_pool 
WARNING: Ignoring JAVA_HOME, because it must point to a JDK, not a JRE.
WARNING: Ignoring JAVA_HOME, because it must point to a JDK, not a JRE.
INFO: Analyzed target //src:memory_pool (36 packages loaded, 169 targets configured).
INFO: Found 1 target...
Target //src:memory_pool up-to-date:
  bazel-bin/src/libmemory_pool.a
  bazel-bin/src/libmemory_pool.dylib
INFO: Elapsed time: 1.568s, Critical Path: 1.05s
INFO: 10 processes: 4 internal, 6 darwin-sandbox.
INFO: Build completed successfully, 10 total actions

2.如何使用

所有的用例放在examples目录

2.1 编写一个简单的case

参见:helloworld

go 复制代码
arrow::MemoryPool* pool = arrow::default_memory_pool();

char* val;
arrow::Status status = pool->Allocate(14, reinterpret_cast<uint8_t**>(&val));

if (status.ok()) {
    std::cout << "Memory allocation successful." << std::endl;
    std::strcpy(val, "Hello, World!");
    std::cout << "Filled content: " << val << std::endl;
    pool->Free(reinterpret_cast<uint8_t*>(val), 4);
} else {
    std::cout << "Memory allocation failed." << std::endl;
}

编译:

go 复制代码
➜  bazel build //examples:hello_world 
WARNING: Ignoring JAVA_HOME, because it must point to a JDK, not a JRE.
WARNING: Ignoring JAVA_HOME, because it must point to a JDK, not a JRE.
INFO: Analyzed target //examples:hello_world (0 packages loaded, 2 targets configured).
INFO: Found 1 target...
Target //examples:hello_world up-to-date:
  bazel-bin/examples/hello_world
INFO: Elapsed time: 0.881s, Critical Path: 0.73s
INFO: 7 processes: 5 internal, 2 darwin-sandbox.
INFO: Build completed successfully, 7 total actions

运行:

go 复制代码
➜  bazel-bin/examples/hello_world
Memory allocation successful.
Filled content: Hello, World!

3.如何测试

测试基于catch2编写,所有测试位于tests目录

可以测试tests目录下面的其他测试,只需要替换submit_test为对应的test即可。

go 复制代码
bazel test //tests:memory_pool_test
相关推荐
AAI机器之心14 小时前
LLM大模型:开源RAG框架汇总
人工智能·chatgpt·开源·大模型·llm·大语言模型·rag
杨荧15 小时前
【JAVA开源】基于Vue和SpringBoot的洗衣店订单管理系统
java·开发语言·vue.js·spring boot·spring cloud·开源
FIT2CLOUD飞致云20 小时前
测试管理新增视图与高级搜索功能,测试计划支持一键生成缺陷详情,MeterSphere开源持续测试工具v3.3版本发布
开源·接口测试·metersphere·团队协作·持续测试·测试管理
杨荧1 天前
【JAVA开源】基于Vue和SpringBoot的旅游管理系统
java·vue.js·spring boot·spring cloud·开源·旅游
杨荧2 天前
【JAVA开源】基于Vue和SpringBoot的水果购物网站
java·开发语言·vue.js·spring boot·spring cloud·开源
x-cmd2 天前
[241005] 14 款最佳免费开源图像处理库 | PostgreSQL 17 正式发布
数据库·图像处理·sql·安全·postgresql·开源·json
customer082 天前
【开源免费】基于SpringBoot+Vue.JS洗衣店订单管理系统(JAVA毕业设计)
java·vue.js·spring boot·后端·开源
杨荧2 天前
【JAVA开源】基于Vue和SpringBoot的周边产品销售网站
java·开发语言·vue.js·spring boot·spring cloud·开源
时光追逐者2 天前
WaterCloud:一套基于.NET 8.0 + LayUI的快速开发框架,完全开源免费!
前端·microsoft·开源·c#·.net·layui·.netcore
customer082 天前
【开源免费】基于SpringBoot+Vue.JS美容院管理系统(JAVA毕业设计)
android·java·vue.js·spring boot·spring cloud·开源