防止cin,cout,cerr实例化

时间:2019-08-20 11:22:54

标签: c++ compilation iostream

this回答所述,当包含iostream库时,二进制大小变得更大,因为std::cinstd::coutstd::cerr(甚至更多) )对象被创建,从而占用大量内存。

我经常为对内存有严格限制的嵌入式平台编译代码。在包含iostream库之后,二进制文件变得很大,以至于它无法放入内部闪存中。这反过来会影响可以包含的库,因为其中很多都包含<iostream>。其中一个示例可以是Protobuf库,因为它包含iostream,所以我不能在多个项目中使用它。

对于在嵌入式平台上运行的那些目标,我不需要创建对象,因为我永远不会使用它。问题是:我能以某种方式阻止创建那些对象吗?也许还有其他解决方法可以允许包含使用iostream的库,而又不会太大地增加二进制文件的大小吗?

1 个答案:

答案 0 :(得分:2)

您不能以标准方式,因为需要<iostream>来定义这些变量。如果您不希望使用变量,则必须直接包含标头(如<ios><streambuf><istream><ostream>和/或<iosfwd>)。我假设您想为这些标头中定义的类包括<iostream>。如果您使用的某些第三方库包含了您不想要的内容,那么您必须咨询该库的作者,就没有通用的答案。