文件夹和命名空间会影响C++和跨平台的性能吗
Will folders and namespaces affect performance in C++ and cross-platform?
有人问到名称空间和文件夹结构是否会影响C#中程序集的性能。答案非常有用,但具体针对C#和CLR。
如果程序集是用C++和gcc编写的,那么名称空间和文件夹结构将如何影响程序集的性能?其他操作系统(如Linux或Mac操作系统)的情况如何?
如果存在任何重大性能问题,我应该做什么或避免做什么来最大限度地提高性能?
目录层次结构和命名空间都不会影响编译的代码。编译器将生成相同的代码。这适用于所有编译器和操作系统。
扩展一下Kyle所说的内容:
名称空间不过是用户和编译器将名称放入不同桶中的一种语法方式。它们的存在是为了让你在不必担心与他人发生冲突的情况下,使用更常见、更合适的名称。CCD_ 1是与数学CCD_ 2类不同的类型。只要它们位于不同的命名空间中,它们就可以共享相同的名称。
就编译器而言,命名空间中的函数与其他任何地方的函数都没有什么不同。它只是有一个有趣的名字。事实上,编译器可以自由地进行所谓的"名称篡改":当编译器看到std::vector<int>
时,它实际上可以将其转换为类似__std~~vector~t~~int32_t~~__
或其他东西。选择mangling算法是为了使全局命名空间中没有用户定义的名称可以与命名空间manglier使用的名称相匹配。因此,所有命名空间范围的名称都与其他命名空间(甚至是全局命名空间)中的名称分离。
基本上,编译过程的第一步是有效地消除命名空间。因此,后面的编译器步骤甚至不知道某个名称空间中有什么东西。因此,他们无法从中生成代码。因此,名称空间不会对编译代码的执行速度产生任何影响。
文件夹。。。不能可能重要。编译后,您将获得一个可执行文件、库或DLL。如果编译器曾经根据源文件的位置生成任何代码,那么最好避免像瘟疫一样使用该编译器。编译器编写者必须对他们的用户进行恶意攻击才能实现这一点。
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- OpenMP阵列性能较差
- 递归列出所有目录中的C++与Python与Ruby的性能
- 大小相等但成员数量不同的结构之间的性能差异
- 通过网络、跨平台传递std::变体是否安全
- 为什么constexpr的性能比正常表达式差
- 在类中使用随机生成器时出现性能问题
- 在main()之外初始化std::vector会导致性能下降(多线程)
- 如何跨平台将二进制资源构建到程序中?
- 海湾合作委员会 ARM 性能下降
- GCC 和 Clang 代码性能的巨大差异
- 在容量内调整矢量大小时的性能影响
- 了解算法的性能差异(如果以不同的编程语言实现)
- 未达到的情况会影响开关外壳性能
- QStringList vs list<shared_ptr<QString>> 性能比较C++
- 是否总是可以将使用递归编写的程序重写为不使用递归的程序C++,性能观点是什么?
- 哪种方法更好,性能明智
- C++ 特征库:引用的性能开销<>
- 如何以跨平台的方式在 C/C++ 中测试计算机的实际一般性能
- 文件夹和命名空间会影响C++和跨平台的性能吗