文件夹和命名空间会影响C ++和跨平台的性能吗?

时间:2012-02-17 02:42:21

标签: c++ performance optimization

有人询问whether namespace and folder structure would affect performance of an assembly in C#。答案非常有用,但具体针对C#和CLR。

如果使用gcc用C ++编写,命名空间和文件夹结构如何影响程序集的性能?其他操作系统的情况如何,例如Linux或Mac OS?

如果存在任何重大性能问题,我应该做什么或避免做哪些以最大限度地提高性能?

2 个答案:

答案 0 :(得分:8)

您的目录层次结构和命名空间都不会影响已编译的代码。编译器将生成的代码将是相同的。这适用于所有编译器和所有操作系统。

答案 1 :(得分:8)

进一步扩展凯尔所说的话:

命名空间只不过是用户和编译器将名称放在不同存储桶中的语法方式。它们的存在允许您使用更常见和适当的名称,而不必担心与其他人的冲突。 std::vector是与数学vector类不同的类型。只要它们位于不同的名称空间中,它们就可以共享相同的名称。

就编译器而言,命名空间中的函数与其他任何地方的函数没有区别。它只是一个有趣的名字。实际上,允许编译器自由地执行所谓的“名称修改”:当编译器看到std::vector<int>时,它实际上可以将其转换为类似__std~~vector~t~~int32_t~~__或类似的东西。选择了重整算法,以便全局名称空间中的任何用户定义名称都不能与名称空间管理器使用的名称匹配。因此,所有名称空间范围的名称都与其他名称空间中的名称分开,甚至是全局名称。

基本上,编译过程的第一步是有效地消除命名空间。因此,后来的编译器步骤不知道甚至是什么名称空间。所以他们不能从中生成代码。因此,命名空间不会对编译代码的执行速度产生任何影响。

文件夹...不能可能重要。编译后,您将获得单个可执行文件,库或DLL。如果编译器根据源文件的位置进行了任何代码生成,那么建议您避免像瘟疫这样的编译器。编译器编写者必须控制他们的用户才能实现这一目标。