删除时没有free()的特殊模式?C++

0 c++ memory-management

我知道这听起来很奇怪,但我需要我的应用程序快速运行,它会做很多新的和删除.所有函数调用new并将ptr传递给期望推送指针到列表或双端队列的那些.

在主循环结束时,程序遍历所有内存并删除它(除非我忘记删除它).我并不夸张.是否有一种模式允许我的代码为new分配objs但不删除它们但只是将其标记为未使用,以便该结构的下一个新代码将使用它而不是完全分配?

我想这会提高性能.它没有完全做到所以我不能基准但我相信我会看到一个提升,如果这是自动的那么好.我可以使用这样的模式或标志吗?

我正在使用gcc(linux,win)和MSVC2010(win).

Ste*_*sop 5

你是什​​么意思"主循环的结束" - 循环结束后,或者在重复之前?

如果是前者,那么您可以安全地在进程退出时分配内存,但不建议这样做.操作系统将恢复它,可能比删除每个对象更快.不会调用析构函数(因此,如果除了释放与该过程相关的资源之外,它们执行任何其他重要操作,那么请不要这样做).调试工具会告诉您内存泄漏,这不是很令人满意,但它适用于您命名的操作系统.

如果是后者,那么"标记未使用的内存以便下一个新的将使用它"正是这样delete做的(好吧,在析构函数之后).但是,一些专用内存分配器比通用分配器更快.如果你有很多相同大小的对象,你可以尝试使用内存池分配器而不是默认的new/delete.

"我想这会提升表现"

不幸的是,我们无法通过想象来获得性能提升;-p首先编写代码,测量性能,然后在知道自己面临的问题后担心更改分配.如果你的代码的无聊,简单版本已经"足够快",那么"更快"几乎是无用的.您通常可以在不对代码的其他部分进行重大更改的情况下更改分配机制,因此您无需在前期设计中担心它.

  • 哦,几十个分配在整个程序的规模上都没有,除非你的主循环重复*至少*数万次.运行一个循环,完成一百万次分配和释放,看看需要多长时间,决定这是否值得你花时间...... (3认同)