C++ 如何衡量管理内存所花费的时间

C++ 如何衡量管理内存所花费的时间,c++,c,memory-management,metrics,C++,C,Memory Management,Metrics,这引起了我对自定义内存分配器的注意。例如,用户Rohmboid说: 如果有,人们就不会编写自己的池分配器 这不是一个明显的好处 他们怎么知道有一个 如果花在管理内存上的时间只占程序持续时间的1%以下,我不想在编写自定义分配器上浪费时间/金钱/精力。我也不想切换到自定义分配器,无法判断加速比。所以我想知道:我如何衡量或至少估计分配/释放/获取内存所花费的时间 我怎么知道有一个 配置您的代码。 优化代码中非热门路径的内容毫无意义 如果分配器A占用了您5%的CPU时间,而您的应用程序占用了其他95%的

这引起了我对自定义内存分配器的注意。例如,用户Rohmboid说:

如果有,人们就不会编写自己的池分配器 这不是一个明显的好处

他们怎么知道有一个

如果花在管理内存上的时间只占程序持续时间的1%以下,我不想在编写自定义分配器上浪费时间/金钱/精力。我也不想切换到自定义分配器,无法判断加速比。所以我想知道:我如何衡量或至少估计分配/释放/获取内存所花费的时间

我怎么知道有一个

配置您的代码。 优化代码中非热门路径的内容毫无意义

如果分配器A占用了您5%的CPU时间,而您的应用程序占用了其他95%的CPU时间,那么将分配器加速两次将使您获得5/2/100=2.5%的提升。现在试着把B加速一点点

怎样 最简单的方法是使用IDE内置的探查器;MSVS one相当不错,尽管我使用的是英特尔VTune;它的易用性非常好,它只是向您展示了-在这里进行优化

使用分析程序有额外的好处;你根本不需要修改你的代码;当您想要更改分析选项并再次运行时,也不必重新编译。也就是说,应用程序中的计时器也可以给出很好的结果,尽管它们很少需要直接放在分配器中。最好是不断地缩小节目花费时间最多的地方

我怎么知道有一个

配置您的代码。 优化代码中非热门路径的内容毫无意义

如果分配器A占用了您5%的CPU时间,而您的应用程序占用了其他95%的CPU时间,那么将分配器加速两次将使您获得5/2/100=2.5%的提升。现在试着把B加速一点点

怎样 最简单的方法是使用IDE内置的探查器;MSVS one相当不错,尽管我使用的是英特尔VTune;它的易用性非常好,它只是向您展示了-在这里进行优化


使用分析程序有额外的好处;你根本不需要修改你的代码;当您想要更改分析选项并再次运行时,也不必重新编译。也就是说,应用程序中的计时器也可以给出很好的结果,尽管它们很少需要直接放在分配器中。最好是不断缩小程序花费时间最多的地方。

您是否尝试过使用探查器?就我参与的最新项目而言,我们一直认为我们需要一个探查器来完成一个将有大量分配的系统。在测试之后,我们决定要在小规模的配置中击败常规的新旧配置是相当困难的。在windows 7上的VS2010中,似乎至少重复的小分配速度快得惊人。人们编写自定义分配程序不是为了让它们更快,而是为了更有效地管理内存。@MichaelFoukarakis,这通常会使程序更快。@BartekBanachewicz一个简单的专用分配程序很少比通用的malloc/new慢,没错,但在某些圈子里,主要动机是减少空间开销和碎片。事实上,这正是池分配器比无块空间开销的性能更好的地方;无论分配历史如何,空间都可以100%使用。您是否尝试过使用探查器?就我个人而言,在我参与的最新项目中,我们一直认为我们需要一个用于将有大量分配的系统的探查器。在测试之后,我们决定要在小规模的配置中击败常规的新旧配置是相当困难的。在windows 7上的VS2010中,似乎至少重复的小分配速度快得惊人。人们编写自定义分配程序不是为了让它们更快,而是为了更有效地管理内存。@MichaelFoukarakis,这通常会使程序更快。@BartekBanachewicz一个简单的专用分配程序很少比通用的malloc/new慢,没错,但在某些圈子里,主要动机是减少空间开销和碎片。事实上,这正是池分配器比无块空间开销的性能更好的地方;无论分配历史如何,空间都可以100%使用。@qdii我想添加编写自己的分配器的另一个可能好处。如果程序员对分配行为有更深入的了解,他可以假设不允许进行通用分配。这就有可能优化各种参数的分配,而不仅仅是速度。例如,知道为某个应用程序分配的大小是固定的这一事实有助于通过创建特定的分配器来避免堆碎片化的风险。这只是一个例子。@junix自定义内存分配是一个复杂的主题,我认为超出了这个答案的范围。你的评论非常有说服力
埃尔康,是的,我完全同意。我只是觉得讨论的速度太快了一点,想说明其他参数可能对这个决定很重要。这就是为什么我决定投票支持你的答案并发表评论,而不是创建一个替代的。@qdii我想添加另一个可能的好处,即编写一个自己的分配器。如果程序员对分配行为有更深入的了解,他可以假设不允许进行通用分配。这就有可能优化各种参数的分配,而不仅仅是速度。例如,知道为某个应用程序分配的大小是固定的这一事实有助于通过创建特定的分配器来避免堆碎片化的风险。这只是一个例子。@junix自定义内存分配是一个复杂的主题,我认为超出了这个答案的范围。不过,你的评论非常受欢迎。是的,我完全同意。我只是觉得讨论的速度太快了一点,想说明其他参数可能对这个决定很重要。这就是为什么我决定投票支持你的答案,并发表评论,而不是创建一个替代的。