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

我有一个问题/好奇心.

假设我想实现一个列表,例如我基本上可以使用cormen book方法.在哪里解释如何实现,插入,删除,键搜索等.

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

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

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

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

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

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

点赞