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
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- MYSQL错误码2059解决办法
- @陈同学的专属Python教程之函数
- 微信小程序的Web API接口设计及常见接口实现
- @陈同学的专属Python教程之常见数据结构
- 用易语言写个简单的小爬虫其中的关键点
- python坐标获取经纬度或经纬度获取坐标免费模块--geopy
- 详解:小程序页面预加载优化,让你的小程序运行如飞
- RocketMQ学习六-消息存储
- swoole 实现 unixSocket 通信
- mybatis-plus一对多关联查询踩坑
- 深入Spring Security魔幻山谷-获取认证机制核心原理讲解
- 文本相似性的总结
- Java面试题总结之JDBC 和Hibernate
- Mac 下搭建 Clion + OpenCV4.x 的开发环境
- 超详细,Windows系统搭建Flink官方练习环境