【问题标题】:Why just including iostream.h makes executable weigh 1mb more?为什么只包含 iostream.h 会使可执行文件重 1mb?
【发布时间】:2014-05-20 23:38:28
【问题描述】:

它甚至不是一个“hello world”,它只是:

#include <iostream>

int main()
{
    return 0;
}

重 1080 kb。当我删除 iostream 包含在程序中以获取

int main()
{
    return 0;
}

可执行文件的大小只有 49 kb。 我只想包含 iostream 并且可能只使用 std::cout,但大小将再次为整个兆字节。那么,问题出在哪里,我该如何解决呢? PS:我正在使用带有 mingW 的 wxDevCpp 并且调试信息功能已关闭。 谢谢。

【问题讨论】:

  • 你确定你真的编译为发布优化吗?
  • 那是因为你付出了你所得到的。 I/O 流实现非常大,即使您“仅”使用 std::cout
  • 包含iostream会增加可执行文件的大小是正常的,特别是考虑到它有模板并且模板的大小很昂贵。
  • 我认为这与 C++ 或 iostream 无关,仅与您的编译器有关。在 Ubuntu 下使用 GCC 4.6.3,可执行文件有 12kb,无论是否包含 iostream。甚至cout &lt;&lt; "hello" 也不会改变大小,除了几个字节。
  • @t.niese 我不确定wxDevCpp中是否有发布/调试业务,有吗?编译器是否有某种命令不包含未使用的函数/模板/类?

标签: c++ iostream


【解决方案1】:

那么,问题出在哪里,我该如何解决呢?

包括&lt;iostream&gt; 实例化全局变量std::coutstd::cinstd::cerr,从而链接到整个c++ I/O 库。

解决此问题的唯一方法是不包括&lt;iostream&gt;,如果您不需要那里的任何东西。

【讨论】:

  • 但是如果我不想使用除了 std::cout 之外的任何东西怎么办?有没有办法只包含 std::cout?
  • 也许更清楚:是的,但 std::cout 本身需要很多东西才能工作
  • @user3496846 '有没有办法只包含 std::cout?' 简而言之:没有!
  • @deviantfan 是吗?如何?请解释一下??
  • @πάνταῥεῖ:好吧,也许我的评论更令人困惑。我的意思是,将未使用的东西留在外面是可能的/微不足道的,但 cout 本身需要很多东西。
猜你喜欢
  • 1970-01-01
  • 2015-07-20
  • 2011-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-16
相关资源
最近更新 更多