基本定义

include: co/def.h.

#typedefs

#定长整数类型

co/def.h 定义了如下的 8 种整数类型:

typedef int8_t  int8;
typedef int16_t int16;
typedef int32_t int32;
typedef int64_t int64;
typedef uint8_t  uint8;
typedef uint16_t uint16;
typedef uint32_t uint32;
typedef uint64_t uint64;

这些类型在不同平台的长度是一致的,不存在可移植性问题。Google Code Style 建议除了 int,不要使用 short, long, long long 等内置整数类型。

#macros

#整型最大、最小值

MAX_UINT8  MAX_UINT16  MAX_UINT32  MAX_UINT64
MAX_INT8   MAX_INT16   MAX_INT32   MAX_INT64
MIN_INT8   MIN_INT16   MIN_INT32   MIN_INT64

这些宏分别表示 8 种整数类型的最大、最小值。

#DISALLOW_COPY_AND_ASSIGN

这个宏用于禁止 C++ 类中的拷贝构造函数与赋值操作。

  • 示例
class T {
  public:
    T();
    DISALLOW_COPY_AND_ASSIGN(T);
};

#__arch64, __arch32

64位系统上,__arch64 定义为 1;32位系统上,__arch32 定义为 1。

  • 示例
#if __arch64
inline size_t murmur_hash(const void* s, size_t n) {
    return murmur_hash64(s, n, 0);
}
#else
inline size_t murmur_hash(const void* s, size_t n) {
    return murmur_hash32(s, n, 0);
}
#endif

#__forceinline

__forceinline 是 VS 中的关键字,放在函数定义开头,强制内联函数,linux 与 mac 平台用下面的宏模拟:

#define __forceinline __attribute__((always_inline))

#__thread

__thread 是 gcc/clang 中的关键字,用于支持 TLS,windows 平台用下面的宏模拟:

#define __thread __declspec(thread)
  • 示例
// get id of the current thread
__forceinline unsigned int gettid() {
    static __thread unsigned int id = 0;
    if (id != 0) return id;
    return id = __gettid();
}

#unlikely

这个宏用于分支选择优化,仅支持 gcc/clang。

  • 示例
// 与 if (v == 0) 逻辑上等价,但提示编译器 v == 0 的可能性较小
if (unlikey(v == 0)) {
    cout << "v == 0" << endl;
}