我从事在Windows,Mac和Linux上运行的C ++项目。因此,有一天在Visual Studio中使用相同的代码部分,下一个是Xcode,下一个是Qt Creator等等,这种情况并不少见。
最近我使用了namespace {}关键字,就像在C#中使用#region / #endregion一样。例如:
// MyFile.cpp
namespace MyNamespace
{
// lots of code related to one class
}
namespace MyNamespace
{
// lots of code related to another class
}
namespace MyNamespace
{
// lots of code related to yet another class
}
虽然这并不允许我按照说法命名区域,但我仍然发现能够折叠大块代码非常有帮助。我知道存在特定于IDE的解决方案,例如#pragma region/#pragma endregion
,但我无法找到与C ++无关的IDE方法。此外,我知道这些大块可以放在他们自己的文件中,但出于这个问题的目的,请假设这不是一个选项。
我的问题是:这是否会在已编译的二进制文件中产生任何开销?这样做会对性能产生负面影响还是会影响最终结果(二进制)?
(注意:我们在Windows上使用Microsoft编译器,在Mac上使用clang,在Linux上使用gcc。)
谢谢!
答案 0 :(得分:2)
对你的问题的简短回答是“不”。遵循长答案:
这是否会在已编译的二进制文件中产生任何开销?
没有。假设您已经在使用命名空间,则影响绝对为零。如果以前不是使用命名空间,那么要链接的错位标识符的大小会有很小的影响。
此:
void identifier() {}
namespace longnamespace { void identifier() {} }
分别成为符号_Z10identifierv
和_ZN13longnamespace10identifierv
。如果你有巨大的项目,数十万符号,它可能会影响(尽管稍微)你的链接时间和动态链接(加载)时间。
这样做会对性能产生负面影响或影响最终结果 (二进制)呢?
是的,至少在加载时间方面。但不是很多。还有 解决方案来缓解它(google为“prelink”和“prebinding”)。