当前位置: 首页 > news >正文

2607d,内存工具

原文

memutils库提供了一套根据不同域调整以提升性能的4个增强型分配器.新的赋值语法带来了许多好处,包括可轻松替换分配器.

1,AppMem:AppMem分配器通过原垃集传输,但已整合以支持新语法,并建议手动管理.如果禁止了DebugAlllocator,自动垃集会通过该分配器工作,但它不会调用任何显式的析构器.

2,ThreadMem:该分配器针对线本堆分配微调了下,不会因锁或垃集的额外压力而变慢.
3,SecureMem:保存敏感数据私有证书,密码或键时,CryptoSafe分配器在释放内存后清零来增强安全性,并且可选地可用一个在崩溃系统休息/休息不会转储到磁盘内存池(SecurePool).
4,Alloc!T:用PoolStack覆盖GC,或如果没有可用的池则回退到.
对分配器友好的容器有:
1,向量:一个数组.
2,数组:一个引用计数向量(允许容器共享物主).
3,HashMap:一个哈希映射.
4,HashMapRef:一个引用计数哈希映射(允许容器共享物主).
5,RBTree:一棵红黑树.
6,DictionaryList:类似C++中的MultiMap,但,按线性搜索数组实现.

对分配器友好的生命期管理对象包括:
1,引用计数:类似C++中的共针,也兼容接口转换.
2,Unique:类似C++中的独针,默认会当作按新创建的对象,但如果指定自定义分配器,则会用.释放free在同一分配器中删除分配的对象指针.

3,ScopedPool:在域结束前给PoolStack添加一个池,允许在调用分配,在创建外的任何地方时覆盖GC分配.

引用计数对象使用了一个新的可在memutils.helpers中找到的可用来替换alias this m_obj;习语的插件模板.它允许底层对象的代理操作(包括重载符号).

推导类型无法在opApply等方法中使用的回调代理中工作,但它提供了与基接口最类似的体验.

示例:

structMyString{mixin Embed!m_obj;//该对象模拟串!string m_obj;//`自定义`方法扩展了"串"基类型的特性!voidtoInt(){}}voidmain(){string ms=MyString.init;//隐性转换也有效MyString ms2=MyString("Hello");//可用`"opStar()"`解引用"`底层对象`assert(is(typeof(*ms2)==string));}

可用AppMem,ThreadMem,SecureMem来分配数组或对象!

A a=ThreadMem.alloc!A();//用`"A"`干活ThreadMem.free(a);ubyte[]ub=AppMem.alloc!(ubyte[])(150);assert(ub.length==150);

向量容器和其他所有容器一样,拥有底层数据的所有权.

string val;string gcVal;{|Vector!chardata;//`默认`使用`线本分配器``(LocklessFreeList)`|data~="Hello there";|val=data[];//使用`opslice[]`符号访问底层数组.|gcVal=data[].idup;//把它移进垃集,来转义未知域!}assert(gcVal=="Hello there");writeln(val);//段错误:收集了`数据`!(这是件好事.)

数组类型RefCounted!(向量),它允许哈希映射有部分所有权,因为标记了@disable this(this)的对象与容器不兼容.

{HashMap!(string,Array!char)hmap;hmap["hey"]=Array!(char)("Hello there!");assert(hmap["hey"][]=="Hello there!");}

使用GC(AppMem)处理容器时,默认仍调用free(),如果你想让数据出域,必须复制它.

string gcVal;{Vector!(char,AppMem)data;data~="Hello there";gcVal=data[].idup;}assert(gcVal=="Hello there");

唯一Unique生命期管理对象默认拥有GC分配的内存.当内存出域时,它会显式释放内存,并且按对象成员工作!

classA{inta;}A a=newA;{Unique!A=a;}assert(a is null);

更多示例见source/tests.d.

http://www.jsqmd.com/news/1267449/

相关文章:

  • AI智能体如何提升冶金工程设计效率与施工协同
  • 还在手动逐句转写音频?2026年音频怎么转换成文字3款工具10分钟搞定长录音
  • 几何光学仿真终极指南:三步掌握Ray Optics Simulation核心功能
  • 2026年LLM系统工程师核心技能与实战指南
  • 终极桌面宠物框架:DyberPet让虚拟伙伴真正“活“在你的电脑上
  • AI 电商赋能抖音小店,无货源一件代发如何安全密文下单不扣分 - 抖掌柜
  • 131、多摄融合与变焦系统:广角/长焦/主摄协同的成像架构
  • 免费快速获取中小学电子课本:tchMaterial-parser完整使用指南
  • 百考通:AI精准赋能文献综述,让学术梳理高效又专业,满足多元研究场景
  • 软件系统逆向生长:可逆变更的工程实践与价值
  • 学完摄影剪辑培训真的能找到工作吗_跟踪12位学员的真实结果研究 - 橡果教育Acorn
  • LocalAIVoiceChat配置指南:从硬件要求到环境搭建的完整步骤
  • 教育者指南:如何利用Joey NMT教授神经机器翻译基础概念
  • Jellium Desktop播放速度设置教程:快速掌握视频倍速配置技巧
  • 绝区零自动化助手:三分钟解放双手的全能游戏伴侣
  • DeepSORT算法在交通监控中的优化与应用实践
  • 腾讯游戏终极优化指南:如何用SGuard Limit彻底解决ACE-Guard资源占用问题
  • 深入解析TI C672x DSP I2C模块:从寄存器配置到实战调试
  • 深入解析TI VPBE视频后端寄存器配置与嵌入式显示驱动实战
  • HoYo.Gacha:终极指南 - 如何永久保存米哈游抽卡记录并深度分析
  • 水下三维建模技术在石油钻井决策中的应用与优化
  • 深入解析嵌入式系统中断与事件机制:以TI CC26x0事件路由与DMA配置为例
  • Linux系统reboot命令原理与生产环境实战指南
  • 打卡信奥刷题(3470)用C++实现信奥题 P10561 [ICPC 2024 Xi‘an I] Smart Quality Inspector
  • 5分钟搞定Mac Boot Camp驱动的终极自动化方案:告别手动安装烦恼
  • 如何选择口碑稳定的正规靠谱装修公司?西安本地家装公司哪个好深度解析 - 速递信息
  • 诚信老房翻新装修机构口碑榜,零套路避坑选定再装不交智商税 - mypinpai
  • OrionCMS性能优化指南:提升Meteor应用响应速度的7个技巧
  • 3分钟搞定!这款免费3D查看器让你秒开CAD模型
  • 为什么选择webpack-bin?探索这款强大Webpack代码沙箱的核心优势