C++ 如何减少简单cpp应用程序的大小?(使用RAD Studio 2010 cpp builder编译)

C++ 如何减少简单cpp应用程序的大小?(使用RAD Studio 2010 cpp builder编译),c++,compiler-construction,c++builder,sdi,C++,Compiler Construction,C++builder,Sdi,我正在使用rad studio 2010 cpp builder。我已经创建了一个新的SDI应用程序,添加了一个TCppWebBrowser控件和一个单击触发器的简单按钮。导航到TCppWebBrowser,我编译了它,得到了一个1.20mb的文件,我希望至少少于700kb 如何减小已编译exe的大小 我不想使用“build with runtime packages”,我知道这会使它变得非常小,但我想在exe中获得所有必要的包和依赖项,但可能我得到的比我使用的更多,我尝试取消选中/删除了很多我

我正在使用rad studio 2010 cpp builder。我已经创建了一个新的SDI应用程序,添加了一个TCppWebBrowser控件和一个单击触发器的简单按钮。导航到TCppWebBrowser,我编译了它,得到了一个1.20mb的文件,我希望至少少于700kb

如何减小已编译exe的大小

我不想使用“build with runtime packages”,我知道这会使它变得非常小,但我想在exe中获得所有必要的包和依赖项,但可能我得到的比我使用的更多,我尝试取消选中/删除了很多我不使用的设计包(在项目/选项/包中),但文件大小没有减小

另外,我在想,RAD Studio附带的TForm组件可能给了我比我需要的更多的东西,这可能会使文件更大,我的意思是,我只需要在表单中删除一个webbrowser控件和几个按钮,也许有一个最小的表单组件可以替代TForm

我知道我可以使用像upx这样的包装机,但我仍然想在包装前将尺寸缩小一半


如果您有任何建议,我们将不胜感激。

调试版本往往比发布版本的版本大得多。如果您没有进行调试构建,您可能会研究“剥离”可执行文件,以删除附加到二进制文件的最后一部分信息数据。

调试构建往往比其发布版本大得多。如果您没有进行调试构建,您可能会研究“剥离”可执行文件,以删除附加到二进制文件的最后一部分信息数据。

这似乎是您选择的库造成的。如果您的库是应用程序中最大的组件,那么您几乎无能为力—最简单的修复方法是使用另一个库。

看来您选择的库应该受到责备。如果您的库是应用程序中最大的组件,那么您几乎无能为力—最简单的修复方法是使用另一个库。

有一些建议:

有一些建议:

如果您真正想要的是一个小的可执行文件,那么您真的不应该使用VCL框架。如果需要低文件大小,则应直接使用Windows API。这将避免框架的开销。无论您使用什么框架,最终都很可能会有一些开销,除非您使用该库的每个特性。像VCL这样的框架的全部思想不是生成小的可执行文件,而是使程序员开发应用程序变得更容易、更快

除了考虑框架的改变(或移除),这里还有一些你应该考虑的事情。但是请注意,这些技术中的许多可能会对编译的可执行文件的性能产生负面影响。选择不使用框架可能会使您陷入一种境地,您可能不得不重新发明轮子——可以说——使您的代码更容易出错。因此,在选择这条道路之前要权衡后果

    >P>您可以考虑使用这样的可执行封隔器可以减少可执行大小,但会对性能产生影响。

  • 您可以使编译器优化为更小的文件大小,而不是更快的可执行文件

  • <> LI>

    如果你真的需要一个小的可执行文件,那么除了不使用VCL框架之外,你还应该考虑不使用RTL,动态地链接许多需要的函数,比如内存分配等等。你可以在这里找到一个很好的指南:在那个页面上实际上有很多有用的提示。其中一些已经在这里的答案中提到了


但底线似乎是,当您需要非常小的可执行文件时,不应该使用任何较大的框架。VCL在易用性和可扩展性方面有着巨大的优势,但它并不节省空间。

如果您真正想要的是一个小的可执行文件,那么您就不应该使用VCL框架。如果需要低文件大小,则应直接使用Windows API。这将避免框架的开销。无论您使用什么框架,最终都很可能会有一些开销,除非您使用该库的每个特性。像VCL这样的框架的全部思想不是生成小的可执行文件,而是使程序员开发应用程序变得更容易、更快

除了考虑框架的改变(或移除),这里还有一些你应该考虑的事情。但是请注意,这些技术中的许多可能会对编译的可执行文件的性能产生负面影响。选择不使用框架可能会使您陷入一种境地,您可能不得不重新发明轮子——可以说——使您的代码更容易出错。因此,在选择这条道路之前要权衡后果

    >P>您可以考虑使用这样的可执行封隔器可以减少可执行大小,但会对性能产生影响。

  • 您可以使编译器优化为更小的文件大小,而不是更快的可执行文件

  • <> LI>

    如果你真的需要一个小的可执行文件,那么除了不使用VCL框架之外,你还应该考虑不使用RTL,动态地链接许多需要的函数,比如内存分配等等。你可以在这里找到一个很好的指南:在那个页面上实际上有很多有用的提示。其中一些已经在这里的答案中提到了


但底线似乎是,当您需要非常小的可执行文件时,不应该使用任何较大的框架。VCL在易用性和可扩展性方面有着巨大的优势,但它并没有节省空间。

是的,很抱歉我忘了提到我正在进行“发布构建”。我将研究“最后一个”的问题