C++ #包括<;字符串>;将~43 KB添加到我的exe

C++ #包括<;字符串>;将~43 KB添加到我的exe,c++,native,codeblocks,C++,Native,Codeblocks,我正在使用Code::Blocks编写程序,当我包含(或)时,我的exe文件的大小会增加。我的程序非常简单,如果大小是你的1关注点(如果你必须保持事物 < P>。h版本主要是为了兼容性而提供的。额外的大小是字符串类,这个大小并不令人惊讶。如果您不希望大小开销为零:不要使用std::string,而是char* 下一步是编译器选项。大多数编译器都可以禁用RTTI并优化大小-Os-fno rtti将是gcc的正确开关 否则,所有尺寸优化的标准技巧都适用: 没有任何静态数据,始终计算 不要使用虚拟函

我正在使用Code::Blocks编写程序,当我包含(或)时,我的exe文件的大小会增加。我的程序非常简单,如果大小是你的1关注点(如果你必须保持事物<20kb,那么它可能是),那么我需要保持它的小,那么标准C++库可能不是要走的路。事实上,任何C++(RTTI、异常等)可能是个坏主意,最好是用直线C. < /P> < P>。h版本主要是为了兼容性而提供的。额外的大小是
字符串
类,这个大小并不令人惊讶。如果您不希望大小开销为零:不要使用std::string,而是
char*

下一步是编译器选项。大多数编译器都可以禁用RTTI并优化大小
-Os-fno rtti
将是gcc的正确开关

否则,所有尺寸优化的标准技巧都适用:

  • 没有任何静态数据,始终计算
  • 不要使用虚拟函数
  • 把东西包紧,使用位域
  • 也许C是比C++更好的选择(这是有争议的)。
您可以尝试使用编译器开关根据文件大小进行优化。如果您没有任何进展,可以尝试使用,但我不确定结果是否会更好。

无论是
还是
都不会重命名/修改C头。他们都是新的C++。如果你想坚持C库,你可以使用<代码> >代码>和<>代码>(代码)>(C代码头的C++版本)。这将大大减少您的应用程序大小。

为什么需要将其保持在20kB以下?不,这是因为它是一个需要运行时支持的类。当你把那个标题包含在编译器中时,需要把STD::Basic字符串和朋友包含到你的模块中。如果你完全避免C++的东西,只与C一起使用,它会减少你的程序的大小,而几乎肯定会增加复杂性。处理这样的复杂性实际上可能需要比所产生的C++代码更多的空间。使用Visual C++ 2008 Express使用“代码”> MD > /COD>标志,使用MVCRT库而不是LBCMT库,然后使用<代码>条剥离它。我的观点是,现在20K对于Windows来说有点不现实。我还应该提到,您可以使用一个名为UPX的实用程序使其更小,但这是以牺牲内存成本为代价的。EXE大小中的成本越低=内存中的成本越高。在某个地方有一个不可避免的权衡。对不起/你需要保持在20kb以下吗?我很难相信,我同意你的观点,C++语言本身并不完全是昂贵的。例如,如果您只在使用结构的情况下使用基本类,而只在使用函数指针的情况下使用虚拟继承,则应该可以。@Longpoke:虚拟继承只应在涉及多重继承的少数特殊情况下使用,其中您从共享一个公共基类的两个类继承,并且您只需要该派生类中基类的一个副本。它与函数指针无关。但是,如果你是指虚拟函数,那就不同了……如果我使用C,我会像现在一样访问windows.h、wininet.h吗?还是必须使用不同的东西?@Lineau:windows.h和wininet.h是C库。是的,windows API还是纯C库,因此,您仍然可以访问所有这些。这只是删除了。5kb:/您指的是虚拟函数,而不是虚拟继承。虚拟继承不会显著影响代码大小。-1表示懒得键入单词“your”和不使用shift键。@advs889:+1表示能够键入标准英语句子。而且,如果你不是迂腐的话,你就不是C++程序员。Billy ONeal:+1因为advs89的nick中的打字错误。与你关于学究风度的评论非常吻合:)@Slacker:Doh!(asdfasdfasdf 15个字符)这才是我真正想要的。虽然C区确实是最好的解决方案,但这是我必须做的,以解决我眼前的问题。