libev中的__attribute__优化
在学习libev的过程中,遇到了大量的__attribute__优化方式,此文章将它们做一个汇总和介绍,并会持续更新
1、unused:使编译器忽略未使用的函数或者变量
源码如下
1 //判断如果gcc的版本号大于3.1或者clang的版本号大于2.8 则使用该功能
2 //否则使用
3 #if ECB_GCC_VERSION(3,1) || ECB_CLANG_VERSION(2,8)
4 #define ecb_attribute(attrlist) __attribute__ (attrlist)
5 #else
6 #define ecb_attribute(attrlist)
7 #endif
8 //封装__attribute__(unused)
9 #define ecb_unused ecb_attribute ((__unused__))
10 //代码中的使用
11 int ecb_unused ocur_ = (cur);
12 //可以看到,如果编译器符合要求,那么上述代码将会扩展为
13 //int __attribute__((unused)) ocur_ = (cur);
14 //否则就会是int ocur_ = (cur);
测试如下:
1 #include <stdio.h>
2
3 int main(){
4 int __attribute__((unused)) a = 0;
5 int b = 0;
6 }
编译结果如下:
可以看到,未使用的a没有报出编译警告,而b则报出了编译警告。
2、 __noinline__:强制编译器不内联某个函数
源码如下
//判断如果gcc的版本号大于3.1或者clang的版本号大于2.8 则使用该功能
//否则不使用
#if ECB_GCC_VERSION(3,1) || ECB_CLANG_VERSION(2,8)
#define ecb_attribute(attrlist) __attribute__ (attrlist)
#else
#define ecb_attribute(attrlist)
#endif
//使用编译器特性来强制不内联某个函数
//如果是微软编译器,并且版本大于等于8.0使用第一种方法,否则使用第二种方法
#if _MSC_VER >= 1400
#define ecb_noinline __declspec (noinline)
#else
#define ecb_noinline ecb_attribute ((__noinline__))
#endif
//对以上的一个封装
#define noinline ecb_noinline
3、__hot__ __cold__ __artificial__:hot表示该函数比较热门,在编译链接时会对其进行优化。cold相反
源码
#if ECB_GCC_VERSION(4,3)
#define ecb_artificial ecb_attribute ((__artificial__))
#define ecb_hot ecb_attribute ((__hot__))
#define ecb_cold ecb_attribute ((__cold__))
#else
#define ecb_artificial
#define ecb_hot
#define ecb_cold
#endif
libev中的__attribute__优化的更多相关文章
- 浅谈iOS中的视图优化
引言: 让我们来思考几个问题,你开发过的产品,它还有可以优化的地方吗?能增加它的帧率吗?能减少多余的CPU计算吗?是不是存在多余的GPU渲染?业务这点工作量对于越来越强大的设备面前显得微不足道,但作为 ...
- Visual C++中的编译器优化
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:Visual C++中的编译器优化.
- 使用ThinkPHP开发中MySQL性能优化的最佳21条经验
使用ThinkPHP开发中MySQL性能优化的最佳21条经验讲解,目前,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更 ...
- Kafka 协议实现中的内存优化
Kafka 协议实现中的内存优化 Kafka 协议实现中的内存优化 Jusfr 原创,转载请注明来自博客园 Request 与 Response 的响应格式 Request 与 Response ...
- Lazy<T>在Entity Framework中的性能优化实践
Lazy<T>在Entity Framework中的性能优化实践(附源码) 2013-10-27 18:12 by JustRun, 328 阅读, 4 评论, 收藏, 编辑 在使用EF的 ...
- libev中timer时间事件监控器
1.数据结构 #define ev_at(w) ((WT)(w))->at#define ev_active(w) ((W)(w))->active typedef ev_watcher_ ...
- 【原创】Webpack构建中hash的优化
背景: SPA的vue应用,采用webpack2构建,打包入口为main.js 输出:main模块打包成app.js,公共lib打包成vendor.js,公共样式打包成app.css,运行时依赖打包成 ...
- Kafka 协议实现中的内存优化【转】
Kafka 协议实现中的内存优化 Jusfr 原创,转载请注明来自博客园 Request 与 Response 的响应格式 Request 与 Response 都是以 长度+内容 形式描述, 见 ...
- 大型系统中使用JMS优化技巧–Sun OpenMQ
我们先来看看在Sun OpenMQ系统中 一个持久.可靠的方式传送消息的步骤是怎么样的,如图所示: 查看大图请点击这里 在传送过程中,系统处理JMS消息分为以下两类: ■ 有效负荷消息,由生成方发 ...
- 在 Android开发中,性能优化策略十分重要
在 Android开发中,性能优化策略十分重要本文主要讲解性能优化中的布局优化,希望你们会喜欢.目录 示意图 1. 影响的性能 布局性能的好坏 主要影响 :Android应用中的页面显示速度 2. 如 ...
随机推荐
- Python 切片/列表/字符串之间装换
1. 怎么实现字符串变为list 使用split(),把字符串拆分再存入数组: 例子 input="ni si shi" output=input.split(" &qu ...
- Object.create() 方浅析
Object.create()方法创建一个新对象,使用现有的对象来提供新创建的对象的__proto__. Object.create(proto[, propertiesObject]) 参数 pro ...
- Outlook配置文件位置
[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles ...
- 询问chatGPT的一些问题
- 远程过程调用失败0x800706be
今天用数据库突然发生了<远程过程调用失败0x800706be>,参考一下网站解决 https://www.cnblogs.com/guohenghai/p/3533091.html 今天在 ...
- openwrt通过gre回源
创建 ip tunnel add GRE网卡名 mode gre local 本地LAN IP remote SERVER LAN IP ttl 255 ip link set GRE网卡名 up ...
- oracle学习之undo读一致性及undo表空间设置大小
1.一致性读和事务 一个事务开始以后,分配undo段头事务表和undo块,事务表指向undo块,数据块中有事务槽,底下有数据行,数据块事务槽中事务ID指向事务表,事务表指向undo块,数据块事务槽也指 ...
- ts的装饰器
console.log('装饰器.......') // 装饰器就是一个方法,可以注入到类,方法,属性上来拓展类,属性,方法,参数的功能 // 常见:类装饰器,属性装饰器,方法装饰器,参数装饰器 // ...
- Python游戏开发常用库
PyWeek:编程挑战,主要是Python游戏开发方面的 PyGame:PyGame在优秀的SDL库之上添加了更多功能.允许使用python语言创建功能齐全的游戏和多媒体程序.具有高度的可移植性,几乎 ...
- 排序算法 | JS
1.冒泡排序 function bubbleSort(arr,order){ let len = arr.length-1,flag=true for(let i=0;(i<len)&& ...