undefined

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
__attribute__ 
__attribute__是一个编译属性,用于向编译器描述特殊的标识、错误检查或高级优化。它是GNU C特色之一,系统中有许多地方使用到。 __attribute__可以设置函数属性(Function Attribute )、变量属性(Variable Attribute )和类型属性(Type Attribute)等。

format 这个属性指定一个函数比如printf、scanf作为参数,这使编译器能够根据代码中提供的参数检查格式字符串。对于追踪难以发现的错误非常有帮助
format参数使用如下
format(archetype, string-index, first-to-check)
archetype指定是那种风格;string-index指定传入函数的第几个参数是格式化字符串;first-to-check指定第一个可变参数所在索引
extern int my_printf (void *my_object, const char *my_format, ...) __attribute__((format(printf, 2, 3)));
如果是c++代码,不要忘记this指针参数

__VA_ARGS__ 是一个可变参数的宏,这个可变参数的宏是新的C99规范中新增的,目前似乎只有gcc支持(VC6.0的编译器不支持)。宏前面加上##的作用在于,当可变参数的个数为0时,这里的##起到把前面多余的","去掉的作用,否则会编译出错。

vasprintf
int vasprintf(char **strp, const char *fmt, va_list ap);
可变参数输出到strp

__thread
gcc内置的线程局部存储设施,其存储效率可以和全局变量相比;__thread变量在每一个线程中都有一份独立实例,各线程值互不干扰。

extern char *strchr(const char *s,char c)
查找字符串s中首次出现字符c的位置。返回首次出现c的位置的指针,如果s中不存在c则返回NULL。

std::aligned_storage
内存对齐
alignof运算符:返回由类型标识所指示的类型的任何实例所要求的对齐子节数,该类型可以为完整类型、数组类型或者引用类型。若类型为引用类型,则运算符返回被引用类型的对齐;若类型为数组类型,则返回元素类型的对齐要求
alignas说明符:指定类型或者对象的对齐要求

POD的含义:Plain old data structure,缩写为POD,是C++语言的标准中定义的一类数据结构,POD适用于需要明确的数据底层操作的系统中。POD通常被用在系统的边界处,即指不同系统之间只能以底层数据的形式进行交互,系统的高层逻辑不能互相兼容。比如当对象的字段值是从外部数据中构建时,系统还没有办法对对象进行语义检查和解释,这时就适用POD来存储数据

std::aligned_storage 希望将内存分配与对象创建分离
将non-POD类型转换为POD类型
#pragma 指令兼容性不够,该标准没有定义任何必须支持的强制编译指示,因此每个编译器都可以自由定义自己的集合。但是 std::aligned_storage 就可以随时使用它

localtime 函数将日历时间timep转换为用户指定的时区的时间
不可重入。它返回的是系统内部一个静态分配的空间。
localtime 可重入,将返回的时间填充到参数重