您现在的位置是:首页 > 文章详情

DStruct:增加静态内存管理/分配器 SMA支持

日期:2023-08-30点击:243

开源软件: 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; }

Other

原文链接:https://www.oschina.net/news/256110/dstruct-2023-8-10
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章