HERD--GCC宏

减少跳转语句失效时CPU等待取指令时间,提高CPU效率

使用__builtin_expect(EXP,N)

意思是EXP==N的概率很大

一般封装为LIKELY和UNLIKELY宏

#define LIKELY(x) __builtin_expect(!!(x),1) 很可能为真

#define UNLIKELY(x) __builtin_expect(!!(x),0) 很可能为假

编译器会利用编程人员做出的判断来生成高效代码

--------------------------------------------------------------------

__inline 关键字建议编译器在合理的情况下内联编译 C 或 C++ 函数。

__inline 语义与 C++ inline 关键字的语义完全相同。

__inline 是一个存储类限定符。 它不影响函数的类型。

格式: inline _declarator;  __inline _declarator; // Microsoft相关 __forceinline _declarator; // Microsoft相关

__inline与inline等同。inline和__inline通知编译器将该函数的内容拷贝一份放在调用函数的地方,这称之为内联。内联减少了函数调用的开销,但却增加了代码量。__forceinline关键字则是不基于编译器的性能和优化分析而依赖于程序员的判断进行内联,但它也不保证一定内敛,有些情况函数是肯定不能内敛的。要慎用__forceinline,不加考虑的使用它将会造成代码量的膨胀而只得到很小的性能回报,甚至造成性能下降。 1.当使用/clr编译器选项时,如果函数使用了安全属性,则不会进行内联。 2.inline关键字仅用于C++;__inline和__forceinline在C和C++中都可用。 3.类的成员函数如果是在类定义的同时定义的,那么它默认是inline的,否则也可以使用inline指定为内联的。 4.如果函数使用了__forceinline关键字,但实际没有进行内联,将给出level 1警告。

在以下情况中,编译器不进行函数内联,即使是使用__forceinline: 1.函数具有可变数目的参数。 2.通过指向该函数的函数指针进行调用。

-----------------------------------------------------------------

__attribute__机制

设置函数、变量、类型的属性

格式是__attribute__((attribute-list))

位置约束:放在声明的尾部,在";"之前。

对结构体共用体设置属性时,有六种属性:aligned(alignment)、packed、transparent_union、unused、deprecated、may_alias

对函数设置属性时,目前见到的有:always_inline

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏偏前端工程师的驿站

JS魔法堂:再识ASCII实体、符号实体和字符实体

一、前言                                            相信大家都熟悉通过字符实体   来实现多个连续空格的输...

1808
来自专栏编程之旅

iOS开发——字典的升序排列以及字符串拼接

在调用SDK包的时候,很多时候我们自己开发的第三方应用想要取得数据的时候得获得登陆令牌以及其他很多信息,比如accessToken等登陆令牌信息,而第三方SDK...

482
来自专栏程序猿的那些趣事

Js面试题__附答案

JavaScript是客户端和服务器端脚本语言,可以插入到HTML页面中,并且是目前较热门的Web开发语言。同时,JavaScript也是面向对象编程语言。

582
来自专栏强仔仔

AngularJS系列之常用指令

这节给大家介绍一下AngularJS中一些常用的指令,例如:ng-app、ng-init、ng-repeat、ng-model等等之类的指令。 那什么是Angu...

1956
来自专栏九彩拼盘的叨叨叨

Sass 写法示例

CSS 本身是非常强大的,但随着样式表变大,变复杂,维护 CSS 变得越来越难。这时候预处理就有用了。Sass 是一种预处理,它能让你使用一些 CSS 中没有的...

691
来自专栏Coding迪斯尼

Reactjs+BootStrap开发自制编程语言Monkey的编译器:词法解析1

911
来自专栏xingoo, 一个梦想做发明家的程序员

Ruby测试小代码[计算50以内的素数]

算法思想 判断某一个数,能不能被比他平方根小的素数整除。 首先看看代码 $arr = [] $arr[0] = 2 def add_prime(n) 3...

1808
来自专栏影子

jQuery中的常用内容总结(三)

4129
来自专栏影子

jQuery中的常用内容总结(三)

962
来自专栏ACM算法日常

POJ-3641:Pseudoprime numbers(快速幂)

Fermat's theorem states that for any prime number p and for any integer a > 1, a...

911

扫描关注云+社区