c – std :: list,std :: vector方法和malloc()
在中断处理程序下使用stl:list和stl :: vector类型我想避免malloc()调用.
问题:在STL列表和向量中阻止malloc()调用的最佳方法是什么?是否足以创建具有预定义大小的结构,然后避免推/弹/擦除调用? 先感谢您 解决方法
作为推荐:我们在我的工作场所使用其他答案中提到的两种方法:
>自定义分配器:对于我们的内存泄漏跟踪系统,我们的仪器分析器和一些其他系统,我们使用提供的分配器预分配和/或“池”(参见例如boost :: pool)分配 – 通常用于std :: set或std :: map,但std :: list的原理相同. 大多数情况下,我们会做这两件事以避免碎片,减少分配器开销,消除复制增加的惩罚等.但有时(特别是对于仪表分析器)我们希望绝对避免在中断处理程序中进行分配. 但是,通常我们会以其他方式避免中断和分配问题: >进入/退出:尽量避免在中断期间执行除标志或普通副本之外的任何操作;有时静态(或预分配)缓冲区是比STL容器好得多的解决方案.持续中断时间过长通常会导致灾难. 请注意,无锁数据结构可以替代此处的第二个项目符号,我们还没有设置和完成分析以查看它是否有用.无论如何,设计自己的业务是棘手的事情. 对于中断处理程序来说,偏执狂是更好的部分:如果你不确定你所做的事情会起作用,那么以一种完全不同的方式解决问题有时会好得多. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |