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. 如 ...
随机推荐
- shell语法6-exit命令、文件重定向、引入外部脚本
一.exit命令 exit命令用来退出当前shell进程,并返回一个退出状态:使用$?可以接收这个退出状态.exit命令可以接受一个整数值作为参数,代表退出状态.如果不指定,默认状态值是 0.exit ...
- bootstrap table表格按钮
1 <body> 2 3 <form action="" method="POST" class="form-horizontal& ...
- 路飞项目 day02 全局日志、全局异常处理、封装Response、数据库准备
一.路飞项目全局日志配置 那个代码不用死记硬背,知道一些地方是啥意思即可 1.复制django自带的日志模块的大代码到dev(settings)文件中 LOGGING = { 'version': ...
- sentinel监控数据持久化&本地测试
官方文档 https://sentinelguard.io/zh-cn/ wiki: 在生产环境中使用-Sentinel 推荐方案:持久化到 时序数据库InfluxDB : 结合Grafana 可 ...
- python3 - Django3.2框架
提示:web开发已有php.java,而python在这方面,没有优势,python的优势在于:爬虫.人工智能.大数据分析等,python在web开发这方面,没必要掌握:版本:稳定版本:3.2(py3 ...
- 解决habbybase 操作hbase报错TTransportException(type=4,message=’TSocket read 0 bytes)
1.确认集群的协议是否一致,在连接的时候,改成一致的.例如集群配置的是TFramedTransport,TCompactProtocol 时 改成 connection = happybase.Con ...
- sqoop mysql2hive
a./etc/profile添加export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$HIVE_HOME/lib/*b.将hive-site.xml 拷贝到 $SQOO ...
- [转]B树与B+树----mysql的索引结构
B树 和B+树是 MySQL索引使用的数据结构,对于索引优化和原理理解都非常重要,下面我的写文章就是要把B树,B+树的神秘面纱揭开,让大家在面试的时候碰到这个知识点一往无前,不再成为你的知识盲点! 1 ...
- 安装oracle出现环境不满足最低要求
安装win64_11gR2_database_1of2的时候出现这个,百度了下解决方法 在oracle安装包找到stage文件夹 然后找到cvu 然后在cvu里面找到cvu_prereq,用记事本打开 ...
- CUDA kernel使用printf调试,一定要加cudaDeviceSynchronize
#include <stdio.h> __global__ void print() { printf("Hello from (%d, %d)\n", blockId ...