首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >各种C/C++编译器的代码优化

各种C/C++编译器的代码优化
EN

Stack Overflow用户
提问于 2013-03-21 21:27:28
回答 3查看 273关注 0票数 1

对于那些为多个平台开发软件的人,如何处理编译器可能比其他编译器做得更好的潜力。

假设您是为OS、Windows、Linux开发的,您使用的是Clang/LLVM、VS和GCC。

所以,如果有人在OS上编译你的应用程序,他们使用GCC,而另一个人用Intel编译器在OS上编译,你可以为英特尔编译器优化代码的各个部分,如果这个人有它们的话。

你能检查一下预处理指令吗?

代码语言:javascript
运行
复制
#ifdef __GCC_
    // do it this way
#endif

#ifdef __INTEL__
    // do it this way
#endif

#ifdef __GCC_WITH C++_V11_Support__
    // do it this way
#endif

#idfef __WINDOWS_VISUAL_STUDIO
    // do it this way
#endif

还是有更好的方法?

如何找到编译器为检查编译器版本提供的指令列表等?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-03-21 21:36:09

不要选择基于预定义宏的实现。让构建系统来控制它。

这使您可以在单元测试期间构建和比较多个实现。

票数 6
EN

Stack Overflow用户

发布于 2013-03-21 21:35:45

通常,优化遵循传统的80/20或90/10规则,即"20%的代码占用80%的运行时间“(而"20%的代码需要80%的开发时间”)。如果你愿意的话,用80/20代替90/10 --几乎总是介于这两者之间.

因此,“为特定编译器优化”的第一步是确定代码的哪些部分比较慢,以及是否可以以通用的方式使代码更好地工作在所有编译器上(例如,传递const引用而不是大对象的副本)。一旦您已经用尽了对代码的所有通用改进,您可能想要查看编译器特定的优化--但这确实要求您获得足够多的信息,因此真正值得对不同编译器之间的代码进行额外的维护。

一般来说,我会非常避免“不同的编译器有不同的情况”。

票数 3
EN

Stack Overflow用户

发布于 2013-03-21 21:33:22

一般来说,编写编译器是为了优化通用代码,而不是专门为编译器编写的特定代码。因此,通常您应该只关注编写干净的代码,使用最快的算法。然而,有些编译器是不允许的,例如gcc,通过使用这些属性可以让编译器更好地完成它的工作。

例如,使用instance属性将允许gcc丢弃函数返回代码,从而最小化代码大小。我想很多编译器都有类似的暗示方案。

这样,我们就可以做到;

代码语言:javascript
运行
复制
#ifdef GCC
     #define NO_RETURN __attribute(...)
#else
     #define NO_RETURN
#endif

并在代码中使用NO_RETURN。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15558488

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档