C++优化tips
来源:互联网 发布:抢购软件有用吗 编辑:程序博客网 时间:2024/05/21 08:47
1 __builtin_expect参数
这个参数可以预测分支,从而优化程序性能。
编译器版本 GNUC < 4的时候
_builtin_expect((expr),1) //表示这个expr有很大可能发生_builtin_expect((expr),0) //表示这个expr有很大可能不发生
2. attribute((regparm(n)))
传递参数的时候希望通过寄存器传递参数,n的范围为0~3。
编译器版本 GNUC >= 3
#define REGPARM1 __attribute((regparm(1)))void REGPARM1 foo(int i)//参数i通过寄存器传递
3. gcc 编译时可以指定宏
gcc -DCONFIG_REGPARM=3 相当于相面的指令
#define CONFIG_REGPARM 3
4. 内存映射,可以加速文件与内存的交互
/*addr明确指定内存映射文件的起始地址length 指定内存映射的大小prot代表权限 PROT_READ/ PROT_WRITE/ PROT_EXECflag 代表映射方式,有两种MAP_PRIVATE / MAP_SHARED MAP_SHARED表示每个进程之间保留自己的备份fd代表想要映射的文件的descripter最后一个参数代表文件的便宜,和第二个参数搭配使用可以分阶段映射大文件。*/void *mmap( void *addr, size_t length, int prot, int flag, int fd, off_t offset );
5 CPU亲和
cpu_set_t set; CPU_ZERO(&set); //cpu_set_t 清零CPU_SET(run_cupmask,&set); //将CPU加到set中sched_setaffinity(0,sizeof(cpu_set_t),&set);//设置当前进程/线程亲和set中CPU
6 查看c++所有预定义宏
cpp -dM /dev/null
7 Linux c++ 设置keepalive包的参数
TCP连接在空间时间会发送keepalive来维持TCP的连接
设置TCP连接的代码如下
static int keep_alive = 1; // 开启keepalive属性. 缺省值: 0(关闭) static int keep_idle = 5; // 如果在60秒内没有任何数据交互,则进行探测. 缺省值:7200(s) static int keep_interval = 5; // 探测时发探测包的时间间隔为5秒. 缺省值:75(s) static int keep_count = 3; // 探测重试的次数. 全部超时则认定连接失效..缺省值:9(次) status = setsockopt(conn->fd, SOL_SOCKET, SO_KEEPALIVE, (void*)&keep_alive, sizeof(keep_alive)); status = setsockopt(conn->fd, SOL_TCP, TCP_KEEPIDLE, (void*)&keep_idle, sizeof(keep_idle)); status = setsockopt(conn->fd, SOL_TCP, TCP_KEEPINTVL, (void*)&keep_interval, sizeof(keep_interval)); status = setsockopt(conn->fd, SOL_TCP, TCP_KEEPCNT, (void*)&keep_count, sizeof(keep_count));
如果keepalive 返回失败,conn->fd 对应的epoll_wait 会返回EPOLLERR的错误事件
0 0
- C++代码优化Tips
- C++代码优化Tips
- C tips
- c++,tips
- C tips
- C tips
- C Tips
- Java代码优化TIPS
- MySQL性能优化TIPS
- oracle 优化tips
- mysql tips 优化
- hive 优化 tips
- Android性能优化Tips
- 数据库的优化tips
- 数据库的优化tips
- 性能优化tips(一)
- 性能优化-代码-tips
- 优化tips-归档
- 正则表达式的一点说明
- 查看IP
- js实现继承的5种方式
- javaScript 迭代与循环
- LeetCode之根据序列求平衡二叉树
- C++优化tips
- webstorm中配置nodejs环境及npm
- android图片加载之imageloader的简单使用
- Loop map
- jsp分页小结
- MemCache超详细解读
- float详解
- ios基于UIScrollView实现滑动引导页
- Linux 中的零拷贝技术,第 2 部分