【发布时间】:2010-09-14 23:48:31
【问题描述】:
我们需要在 Windows 平台上编写小型快速代码,我知道在某些情况下 boost 仅具有标头实现。它们需要很小是有原因的,所以我们一直小心不要因为大小而实际使用标准 C++ 库。
我的问题是,使用 boost asio 或 system 是否也会在 windows 下的 std C++ 库中拖拽?
编辑:是的,小而快。我知道 std c++ 库的某些部分即使不比 C 快也非常快。但是,大小对我们来说是一个因素,因为最终用户会即时下载它们,我们不希望任何主要依赖项或大量下载,例如拉入 MFC 使用一个功能!我们倾向于将 C++ 用作 C++ 的扩展版本。只使用对象,没有 RTTI,没有 IO 流。
我想我的问题可以归结为: boost 的哪些部分可能使用流库? ASIO 会不会让我的代码膨胀,而不仅仅是直接使用 win32 API?
【问题讨论】:
-
仅标头库(即任何模板化的库)往往会使应用程序大小膨胀,而不是缩小,因为实现是内联的而不是共享的。如果你的目标是小,你最好使用 C 而不是 C++。如果不编写大量自定义代码,C++ 的小而快是很困难的。现在,您可能会在发布模式下使用 Windows 上的整个程序优化获得一些运气。它可能能够消除冗余代码,但需要在大小和速度之间进行权衡。
-
@Nathan:只需通过编译器选项优化大小而不是速度。这一点都不难。如果模板实例化仍然占用太多,只需将
T更改为void*并进行强制转换。 (贸易安全和易用性的大小。)C++ 到 C 不仅仅依赖于模板。 -
使用标准库如何导致代码量大?我怀疑你自己实现的任何执行相同功能的东西都会变得更小(
iostream可能除外) -
@GMan,我在做一个概括。我讨厌消除安全性(一旦你介绍了 C,我就知道,你已经完成了)。老实说,我认为 OP 最好自然地编写代码然后配置文件以查看在哪里提高速度。即使在当今功能最差的计算机上,我也几乎不认为 C++ 标准库中的链接是一个问题。
-
@Nathan:一个不真实的概括。使编译器可能内联通常不会导致代码膨胀。编译器并不愚蠢,除非回报值得,否则不会内联。经常与模板相关的代码膨胀有不同的原因