C++ 内存占用问题

C++ 内存占用问题,c++,C++,我只是好奇我在unix中有一个9MB左右的二进制可执行文件。这被认为是一个很大的内存占用吗?客户端将调用它来生成一些值,并随后在其他地方对消息进行排队。我只是好奇,谁会知道当一个程序的内存占用太大,然后不得不像一个静态库而不是一个可执行文件那样提供时,它是如何做到的 这一切都取决于9MB的容量能带来多大的价值。例如,如果文件添加了几个数字,那么肯定太大了。然而,现在9MB并不是那么多,因为服务器可以轻松拥有超过8GB的内存 作为比较,仅启动一些VM就可以使用超过50MB的内存。一切都是相对的。如

我只是好奇我在unix中有一个9MB左右的二进制可执行文件。这被认为是一个很大的内存占用吗?客户端将调用它来生成一些值,并随后在其他地方对消息进行排队。我只是好奇,谁会知道当一个程序的内存占用太大,然后不得不像一个静态库而不是一个可执行文件那样提供时,它是如何做到的

这一切都取决于9MB的容量能带来多大的价值。例如,如果文件添加了几个数字,那么肯定太大了。然而,现在9MB并不是那么多,因为服务器可以轻松拥有超过8GB的内存


作为比较,仅启动一些VM就可以使用超过50MB的内存。

一切都是相对的。如果应用程序在8MB内存的机器上运行,则占用空间很大。如果应用程序运行在一台内存为64GB的机器上,它就不会很大。再说一次,如果大部分RAM被某个大型Oracle实例占用(例如),那么即使在64GB RAM机器上,它也可能很大


您还应该考虑到,实际上只有9MB中的一部分被加载到RAM中——readelf或objdump实用程序可以显示具体的加载量。

早在1996年,我就经常为顶级CAD/CAM供应商创建可执行文件(静态链接),根据平台的不同,这些文件的大小通常在32到50MB之间。是的,当内存为每MB 40美元时,我们设法用我们的程序填满了一个系统。1996年。有鉴于此,我今天看到的wrt软件膨胀的一切都让我恼火,因为该程序在启动时比大多数人一整天做的都多。:-)


所以不,除非是“helloworld.exe”,现在9MB已经不多了

我有1.5TB的硬盘空间。我可以在磁盘上放174762份二进制文件

至于ram,如果二进制文件中有9MB的代码(我对此深表怀疑),那么可能所有代码都会保存在ram中


否则,可执行加载程序可能只加载它所需的部分,如果二进制文件中有一些资源或未映射的部分,它们不必在整个运行时都保存在ram中。无论如何,您可能至少有1-4GB的ram,所以这显然不是问题…

这听起来很正常。通过静态链接到各种LIB或启用调试符号,您可以快速达到9MB。

每当我为Linux编译SDL MAME时,我通常会得到30或40 MB的二进制文件。我们销售的Delphi dll的大小高达80 MB,这里的共识是9MB可执行文件并不是什么大问题。这将在solaris服务器上运行,我100%确信他们有足够的空间。我只是觉得,与静态库相比,以这种格式获取它对他们来说并不方便。然而,由于他们是一个小客户,我不太可能为他们提供服务,而我们的大客户最初要求它是一个可执行的。愚蠢的问题。。。您是否在发布模式下编译(优化已打开,没有调试信息)并从可执行文件中剥离符号?我正在开发一个控制台程序,在调试模式下超过10MB,在发布模式下缩小到1MB。这是在unix中完成的。不是窗户。但我有一个windows版本,你能不能在visual Studio 08发布一个优化版本的说明?我想那会派上用场的。thanksI认为OP是对可执行文件大小的好奇,而不是对内存使用的好奇。是的,对于一些人来说,使用静态库似乎更容易。但是我部署了这个可执行文件,因为其中一个我们根本不想分享我们的代码,还有两个更大的客户希望这样做,所以它成功了。然而,一个较小的客户机将与较大的客户机做相同的事情,只是希望它作为一个静态库,因为这样对他们来说更容易避免更多的开发/测试和维护问题。我坚持己见,并要求他们只对可执行文件进行外部调用,以获得他们需要的内容。