对引用取地址

今天突然想到,如果我们对一个引用取地址,那么会怎么样呢,例如这样 #include <stdio.h> class CNumber { public: int n; }; void printByPointer(CNumber* pNumber) { printf("%d\n", pNumber->n); } void printByRef(CNumber& oNumber) { printf("%d\n", oNumb……

阅读全文

最简 Makefile

依赖于 Makefile 的自动推导,可以写出非常简化的 Makefile,假设目录下有有 Number.cpp 的单个 cpp 文件,内含 main 函数,那么,Makefile 可以这样写 all: Number 是的,就一行,all 作为默认 target,Number 作为依赖,自动推导出依赖源文件 Number.c*,如果是 cpp,得到编译器 g++,如果是 c,得打编译器 cc,然……

阅读全文

练手代码白板

先来一个简单的 list #include <stdio.h> class ListNode { public: ListNode(int n) { this->n = n; this->pNext = NULL; } int n; ListNode* pNext; }; class List { public: ListNode* pHead; List(ListNode* pHead) { this->pHead = pHead; } List* add(ListNod……

阅读全文

修改网卡缓冲以提高吞吐量

在单机并发上万的时候,发现 sendto 函数比较容易出现返回错误 EAGAIN,对应的错误消息为 Resource temporarily unavailable,这种情况下认为是应用层写入过快,导致网卡缓冲满了 使用这个命令来查看缓冲区现有大小 # ethtool -g eth1 Ring parameters for eth1: Pre-set maximums: RX: 4096 RX Mini: 0 RX Jumb……

阅读全文

手工编译 apache 的一些琐碎

压测的时候用到 apache ab,但是 ab 本身支持的并发最大 1000,过了报错,修改源码 support/ab.c 把这行注释掉 apr_err("apr_socket_recv", status); 但是编译的时候各种依赖,手工解决好烦,首先出来 undefined reference to apr 系列的函数,查到这里,http://hi.baidu.com/yang171892…,说了 col……

阅读全文

分支预测以及 gcc 的 __builtin_expect

在阅读代码的时候,发现有类似这种写法: bvl = bvec_alloc(gfp_mask, nr_iovecs, &idx); if (unlikely(!bvl)) { mempool_free(bio, bio_pool); bio = NULL; goto out; } 注意到第二行,if 的判断中,加入了一个 unlikely,这个东西是一个 CPU 指令的优化,用于分支预判,关于分支预判,可以看这个 s……

阅读全文