我只是好奇,我在Unix系统中有一个大小约为9MB的二进制可执行文件。这是否被认为是大的内存占用?客户端将调用此文件以生成一些值,并随后在其他地方排队消息。我只是好奇,如何知道程序的内存占用过大,并且需要提供静态库而不是可执行文件呢?
我只是好奇,我在Unix系统中有一个大小约为9MB的二进制可执行文件。这是否被认为是大的内存占用?客户端将调用此文件以生成一些值,并随后在其他地方排队消息。我只是好奇,如何知道程序的内存占用过大,并且需要提供静态库而不是可执行文件呢?
一切都是相对的。如果应用程序在只有8MB RAM的机器上运行,它的占用空间就很大。如果应用程序在64GB RAM的机器上运行,它的占用空间就不算大。但是,如果一些巨大的Oracle实例(例如)占用了大部分RAM,即使在64GB RAM的机器上,它可能仍然很大。
你还应该考虑到,只有9MB的一部分实际上被加载到RAM中--readelf或objdump工具可以向你展示确切的加载量。
这完全取决于你从这9MB中获得了多少价值。例如,如果该文件只添加了一些数字,则明显太大了。然而,在如今一个服务器可以轻松拥有超过8GB的内存的情况下,9MB并不算太多。
相比之下,启动一些虚拟机可能会使用超过50MB的内存。
回到1996年,我通常为一家顶级CAD/CAM供应商创建可执行文件(静态链接),这些文件的大小通常在32到50MB之间,具体取决于平台。是的,在每MB 40美元的时代,我们设法用我们的程序填满了系统。在1996年。鉴于此,今天我看到的所有与软件膨胀有关的东西都让我很生气,因为那个程序在启动时所做的事情比大多数人整天所做的事情还要多。:-)
因此,除非它是“helloworld.exe”,否则9MB在今天并不算太多。
听起来很正常。通过静态链接到各种库或启用调试符号,您很快就可以达到9MB。
我有1.5TB的硬盘空间。我可以在我的磁盘上放174762个该二进制文件的副本。
至于内存,也许如果那个二进制文件中有9MB的代码(我非常怀疑),那么可能所有内容都会被保存在内存中。
否则,可执行加载器可能只会加载它需要的部分,如果有一些资源或未映射的二进制文件部分,在整个运行时不需要一直保存在内存中。无论如何,您可能至少有1-4GB的内存,所以这显然不是问题...