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. 如 ...
随机推荐
- Win10删除此电脑默认的7个文件夹
删除方法 用记事本拷贝以下内容,改文件后缀为reg,然后点击执行. Windows Registry Editor Version 5.00 ;如需还原去除上语句前减号即可 ;取消我的电脑" ...
- Python安装及配置教程
安装教程 一.python3.6安装步骤 1.首先我们移步官网,下载最新版本的python-3.6.0.点我,我把你传送到python官网 在DownLoad下拉框中点击Windows,选择要下载的文 ...
- Windows 分辨率改变引起WPF的适应问题
系统分辨率变化,全屏WPF的UI出现没更新和白底之类的现象记录. 您可以使用SystemParameters.WorkArea.最初设置MainWindow的MaxHeight. 在MainWindo ...
- vue3 门户网站搭建7-eslint
为了方便阅读和维护,代码规范还是有必要的 1.安装:npm i eslint --save-dev 2.配置 .eslintrc.cjs 文件,增加 rules: rules: { 'semi': [ ...
- pytest设计项目结构
api目录封装所有的接口 testcases目录写所有的测试用例.conftest全局登录前置操作 data目录测试数据 common或者utils目录.存放公共模块比如读取yml文件.连接数据库.所 ...
- C# RGB转Brush
C#中自定义一个Brush,使用Color赋RGB值给Brush: dataGrid2.HorizontalGridLinesBrush = new SolidColorBrush(System.Wi ...
- 数字图像处理之直方图处理——a cute dog huang
关于图像处理的知识,确实很棒,在此感谢:https://blog.csdn.net/mary_0830/article/details/89003488 直方图处理概念灰度级范围为[0,L-1]的数字 ...
- Echarts实现不均匀刻度的方法,自定义刻度(转)
原文地址 今天突然有个我们的咨询公司找我问一个echarts问题,这个问题确实值得一解决,很有意思. 问题是这样的.数据中有很多低于100的数值,但是最高值却能达到14000. data = [93. ...
- VS2017创建Linux项目实现远程GDB调试
vs2017新增linux for C++的模块,尝试安装了一下环境. 首先,安装VS2017,安装时注意选择以下模块: 安装完成后,需要配置Linux服务端的部分,我的配置过程如下: 第一步,安装V ...
- mfcc vs fbank
There is some debate in the community regarding the use of the DCT, instead of directly using the lo ...