【直播预告】eBPF 到底是可观测领域的神器 or 鸡肋?
ZhouSa.com-周飒博客 
开源软件: DStruct 数据结构库 开发日志 2023.8.10
An easy-to-port/learn/use C++ data structure template library | 一个易于移植/使用/学习且结构简洁的数据结构模板库增加基层的静态内存管理/分配器 SMA ( Static Memory Allocator )
[目标]
增加DStruct中需要动态内存分配的容器/数据结构 在特殊环境下(不支持动态内存分配的开发环境)的可用性[实现思路]
划分一块 匿名的 全局的静态内存区域 , 在这个区域做一个简单的内存管理和分配策略[可能的特殊环境]
- 嵌入式开发环境
- 裸机开发环境
- 内核环境
- 等其他不支持动态内存分配的环境
[内存管理/分配器特性]
- 自定义匿名全局静态内存大小 和 最大空闲块设置
- 内存"碎片"整理/合并
- 多定义支持(定义多个SMA用于不同场景, 例如给每个容器配置一个特殊的内存分配器)
- 容器Alloc接口支持
Vector 使用 SMA 作为分配器的 例子 -- 当无动态内存分配支持时
#include <iostream> #include "dstruct.hpp" #define MEM_1M_BYTE 1024 * 1024 // define SMA, 1M size using MySMA_1M = dstruct::StaticMemAllocator<MEM_1M_BYTE>; int main() { std::cout << "\nTesting: " << __FILE__; dstruct::Vector<int, MySMA_1M> vec; //std::cout << MySMA_1M::free_mem_size() << std::endl; DSTRUCT_ASSERT(MySMA_1M::free_mem_size() == MEM_1M_BYTE); vec.resize(8, 1); // 8 * 4 = 32 //std::cout << MySMA_1M::free_mem_size() << std::endl; DSTRUCT_ASSERT(MySMA_1M::free_mem_size() == MEM_1M_BYTE - vec.capacity() * sizeof(int)); vec.push_back(4); //std::cout << MySMA_1M::free_mem_size() << std::endl; DSTRUCT_ASSERT(MySMA_1M::free_mem_size() == MEM_1M_BYTE - MySMA_1M::MEM_ALIGN_ROUND_UP(vec.capacity() * sizeof(int))); std::cout << " pass" << std::endl; return 0; }
还没有评论,来说两句吧...