- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在开发一个使用 C++ 编写的大型服务器应用程序。该服务器可能需要运行数月而不重新启动。碎片在这里已经是一个可疑的问题,因为我们的内存消耗会随着时间的推移而增加。到目前为止,测量是将私有(private)字节与虚拟字节进行比较,并分析这两个数字的差异。
我处理碎片化的一般方法是留待分析。我对一般性能和内存优化等其他事情也有同样的思考方式。您必须用分析和证明来支持更改。
我在代码审查或讨论期间注意到很多,内存碎片是最先出现的事情之一。几乎就像现在对它产生了巨大的恐惧,并且有一个提前“防止碎片化”的大倡议。请求的代码更改似乎有利于减少或防止内存碎片问题。我倾向于立即不同意这些,因为它们对我来说似乎是过早的优化。我会牺牲代码的清洁度/可读性/可维护性/等等。为了满足这些变化。
例如,拿下面的代码:
std::stringstream s;
s << "This" << "Is" << "a" << "string";
上面,stringstream 在这里进行的分配数量是未定义的,它可以是 4 个分配,或者只是 1 个分配。所以我们不能仅基于此进行优化,但普遍的共识是要么使用固定缓冲区,要么以某种方式修改代码以潜在地使用更少的分配。我真的不认为 stringstream 在这里扩展自己是内存问题的一个巨大贡献者,但也许我错了。
对上述代码的一般改进建议如下:
std::stringstream s;
s << "This is a string"; // Combine it all to 1 line, supposedly less allocations?
还有一个巨大的插入力,即尽可能在堆上使用堆栈。
是否可以通过这种方式抢占内存碎片,或者这仅仅是一种错误的安全感?
最佳答案
如果您事先知道您需要低碎片化并且您已经预先衡量碎片化对您来说是一个实际问题并且您就不是过早的优化提前知道代码的哪些部分是相关的。性能是必需的,但盲目优化在任何情况下都是不好的。
然而,更好的方法是使用无碎片的自定义分配器,如对象池或内存区域,这样可以保证没有碎片。例如,在一个物理引擎中,你可以为所有的 per-tick 分配使用一个 memory arena 并在最后清空它,这不仅快得离谱(甚至比 VS2010 上的 _alloca
还快)而且极高的内存效率和低碎片。
关于c++ - 编码 : Premature Optimization or not? 时考虑内存碎片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10629556/
我一直在为我正在编写的应用程序而苦苦挣扎,我想我开始发现我的问题是过早的优化。我的完美主义一面希望在第一次通过时就使一切变得最佳和完美,但我发现这使设计变得相当复杂。我倾向于编写尽可能多的功能以提高效
We should develop on slow boxen because it forces us to optimize early. Randall Hyde 在 The Fallacy o
编辑:回答:我需要为“einlesen()”函数创建另一个游标。 这是我第一次在 Python 中使用 SQLite3,所以请原谅我(也许)可怕的语法;)我正在尝试构建一种 DVD 数据库,它直接从亚
result_t work(resource_t& resource) { lock_t ___(resource); return work_impl(resource); } 是否
我正在构建一项新服务,当我 curl 它时,我看到一条消息 Curl_http_done:称为过早。我找不到任何关于它的含义的文档,想知道我的服务是否不符合某些 http 规范? ➜ ~ git:(
我使用 Web-flux/Reactive 和 Webclient,在 tomcat 和 spring-boot 上运行它。 一切正常。我阅读了很多关于它的信息。问题好像是每当你使用webclient
我正在尝试使用 Stream 下载 xml 文件,一切都很好,直到 xml 大小变得大于 9 MB,所以我收到此错误java.io.IOException:过早的 EOF 这是代码 BufferedI
我正在尝试使用 urllib2 和 zlib 以及来自这两个 stackoverflow 问题的技术在 python 中处理从互联网上提取的大型 gzip 文件: > Python decompres
我一直在使用 JDOM 库通过 Java Servlet 读写 XML 文件。 问题是,当我使用 AJAX 向读取和写入 XML 文件中的数据的 servlet 发送许多请求时,很多时候它无法显示错误
我正在开发一个使用 C++ 编写的大型服务器应用程序。该服务器可能需要运行数月而不重新启动。碎片在这里已经是一个可疑的问题,因为我们的内存消耗会随着时间的推移而增加。到目前为止,测量是将私有(priv
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题? Update the question所以它是on-topic对于堆栈溢出。 9年前关闭。 Improve this que
我正在尝试通过套接字将图像文件从服务器发送到客户端。 套接字以前用于将一些字符串从服务器发送到客户端(使用缓冲的输入/输出流)。 问题是无法正确接收图像文件,出现“JPEG 文件过早结束”错误。 服务
出于某种原因,我收到了 HttpRequestException,其中包含消息“响应提前结束。我正在创建大约 500 个任务,这些任务使用我的 RateLimitedHttpClient 向网站发出请
我正在尝试使用阿尔卡特 OT900A 提交表单,但出现此错误 ava.io.IOException:损坏的表单数据:提前结束在 com.oreilly.servlet.multipart.Multip
当我尝试以这种方式解析来自网络的 XML 文件时: URL url = new URL("http://www.nbp.pl/kursy/xml/a074z120416.xml"); URLConne
我的代码有问题,但我不知道哪里出了问题。 我正在为客户编写应用程序。在启动画面期间,应用程序检查 Mysql 是否正在运行以便稍后能够连接到它。如果 mysql 处于打开状态,应用程序将继续启动。如果
import java.io.*; import com.lowagie.text.DocumentException; import org.xhtmlrenderer.pdf.ITextRende
我正在使用 OpenCV 从文件夹中读取图像。出现了很多这样的消息: Corrupt JPEG data: premature end of data segment Premature end of
这是有效的,但突然间我收到了这条错误消息。 “错误信息:脚本头过早结束:cust.php" "; echo "Back to main page"; } mysql_close(); ?> 请帮忙,提
项目开发中,链接mongodb的项目,偶尔报错com.mongodb.MongoSocketReadException: Prematurely reached end of stream 报错的详细
我是一名优秀的程序员,十分优秀!