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

Will folders and namespaces affect performance in C++ and cross-platform?

本文关键字:性能 跨平台 影响 命名空间 文件夹 C++      更新时间:2023-10-16

有人问到名称空间和文件夹结构是否会影响C#中程序集的性能。答案非常有用,但具体针对C#和CLR。

如果程序集是用C++和gcc编写的,那么名称空间和文件夹结构将如何影响程序集的性能?其他操作系统(如Linux或Mac操作系统)的情况如何?

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

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

扩展一下Kyle所说的内容:

名称空间不过是用户和编译器将名称放入不同桶中的一种语法方式。它们的存在是为了让你在不必担心与他人发生冲突的情况下,使用更常见、更合适的名称。CCD_ 1是与数学CCD_ 2类不同的类型。只要它们位于不同的命名空间中,它们就可以共享相同的名称。

就编译器而言,命名空间中的函数与其他任何地方的函数都没有什么不同。它只是有一个有趣的名字。事实上,编译器可以自由地进行所谓的"名称篡改":当编译器看到std::vector<int>时,它实际上可以将其转换为类似__std~~vector~t~~int32_t~~__或其他东西。选择mangling算法是为了使全局命名空间中没有用户定义的名称可以与命名空间manglier使用的名称相匹配。因此,所有命名空间范围的名称都与其他命名空间(甚至是全局命名空间)中的名称分离。

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

文件夹。。。不能可能重要。编译后,您将获得一个可执行文件、库或DLL。如果编译器曾经根据源文件的位置生成任何代码,那么最好避免像瘟疫一样使用该编译器。编译器编写者必须对他们的用户进行恶意攻击才能实现这一点。