加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 为动态数据结构预分配内存

发布时间:2020-12-16 07:16:48 所属栏目:百科 来源:网络整理
导读:我有一个问题/好奇心. 假设我想实现一个列表,例如我基本上可以使用cormen book方法.在哪里解释如何实现,插入,删除,键搜索等. 然而,对于内存使用而言,没有任何说法.例如,如果我想在整数列表中插入一个整数.我可以例如首先创建一个节点(我在那里分配内存)插入
我有一个问题/好奇心.
假设我想实现一个列表,例如我基本上可以使用cormen book方法.在哪里解释如何实现,插入,删除,键搜索等.

然而,对于内存使用而言,没有任何说法.例如,如果我想在整数列表中插入一个整数.我可以例如首先创建一个节点(我在那里分配内存)插入整数然后在列表中插入节点.如果我想删除一个整数,一旦我知道存储了哪个节点,我就必须释放内存.

我现在想知道是否更方便的是预先分配内存以存储10个节点并保持指向要使用的空闲节点的指针.如果内存池已满,那么我将为20个节点重新分配内存,如果池大于此类池的一半(依此类推)等等.该池当然更难管理,因为我需要例如处理可能的内存碎片等.

我说的是否有意义?还是没有意义?我读过一本关于游戏编程的书,内存预分配可以提高性能,但我想知道如何.

解决方法

这既是一个简单而又复杂的问题.如果您在标准问题中运行,则实际上不必担心内存分配.例如,为10个节点预分配内存在任何规模上都不会有效,并且您的性能问题可能在其他地方.但是,如果您的程序每秒不断分配和释放数百或数千个小对象,则可能导致内存碎片,您可能需要编写自定义分配器.

除了std :: vector :: reserve函数之外,几乎没有标准容器没有任何预分配元素存储的方法.但是,所有这些都允许在构造函数中使用自定义分配器.此外,还有placement new操作符.

你可以尝试尝试这些东西,它们写起来很有趣,如果你绝对不需要,就不要在生产中使用它们.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读