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 条评论
登录 后参与评论

相关文章

来自专栏Brian

Python进阶教程(二)

概述 在上一篇博客中,我们介绍了Python进阶教程(一),还有一些新的技巧没有翻译完,我们下面来继续我们的翻译。 Intermediate Python 中译...

4818
来自专栏编程

linux基础(三)

一、文本处理工具 1、文本查看工具less和cat cat -E filename 能看到行的结束符 -A filename 能看到tab键 回车 (hexdu...

2787
来自专栏机器学习和数学

[编程经验]python2和python3的区别总结

最近涨粉涨的厉害啊,那天看刚破800,今天打开又有32个新粉丝,有点开心,哈哈哈。说实话,看的人多的话,是我坚持下去最大的动力。。。 = = = print("...

3124
来自专栏码云1024

c++模板与泛型编程

2983
来自专栏PHP在线

PHP中正则表达式学习及应用

正则表达式元字符 * 匹配前一个内容的0次1次或多次 . 匹配内容的0次1次或多次,但不包含回车换行 + 匹配前一个内容的1次或多次 ?匹配前一个内容...

3368
来自专栏我的博客

TP入门第十二天

1、模板技术 为何使用模板这里就不罗嗦了,直接介绍模板技术 变量传递和显示: 例如在action里面可以这样写 $title=”变量”; $arr=array(...

3416
来自专栏Java 源码分析

并查集

​ 在我们需要判断某一些事物之间是否存在一定的关系的时候,我们最好的办法不是使用图而是使用并查集。因为我们关心的是他们之间是否有关系,而不是关心的他们到底...

3607
来自专栏杨建荣的学习笔记

MySQL字符串中抽取数值的方法

MySQL的字符串函数非常多,以至于有时候我不知道该如何灵活的使用这些函数。 字符串基本信息函数 collation convert,char_len...

2908
来自专栏刘望舒

Java虚拟机(二)对象的创建与OOP-Klass模型

前言 在前一篇文章中我们学习了Java虚拟机的结构原理与运行时数据区域,那么我们大概知道了Java虚拟机的内存的概况,那么内存中的数据是如何创建和访问的呢?这篇...

25810
来自专栏java一日一条

Java 程序优化:字符串操作、基本运算方法等优化策略

字符串对象或者其等价对象 (如 char 数组),在内存中总是占据最大的空间块,因此如何高效地处理字符串,是提高系统整体性能的关键。

781

扫码关注云+社区

领取腾讯云代金券