And*_*ndy 4 .net c++ java memory-management
我正在编写一个C++应用程序,它需要一块内存(大约1000字节)作为一些文本处理的临时缓冲区.该操作可以每秒重复多达10,000次.
任何人都可以确认每次我需要缓冲区时分配内存会更加昂贵(即带有智能指针的新内存,当超出范围时内存被释放),而不是拥有固定缓冲区并清除它(写入每个字节)它每次处理完成后都为零?
这听起来像C++的常识,但我在互联网上找不到任何确认它的东西.
具有自动垃圾收集功能的计算机语言(例如Java,.net)的情况是否不同?
Mic*_*fik 16
每次需要时分配和释放内存可能更昂贵,但更大的问题是:它是否重要?写它是最简单的方式,你知道它如何正常工作,不泄漏/破坏内存.只有这样,如果您的表现不够好,请对代码进行分析,以了解您可以在哪些方面进行改进.
虽然我不能给你一个学术上的"确认",但考虑一下:
每当CPU执行指令时,都会花费时间.如果您拆除缓冲区,然后重新分配它,CPU将必须执行deallocate/reallocate指令.如果重用缓冲区,则不必执行这些操作.
可以肯定的是,它的重用速度更快(我们甚至没有谈到内存局部性,其中相同的内存可以保留在CPU缓存中).
话虽如此,除非你正在写一些必须非常,非常紧张的东西(比如实时应用程序),或者除非你已经确定这个缓冲区是你应用程序的瓶颈(当你进行性能测量时),我会比如用最有意义的方式写它,并且最容易维护.在现代机器上,维护成本可能占软件总成本的比例大于管理1,000字节的性能成本.
| 归档时间: |
|
| 查看次数: |
830 次 |
| 最近记录: |