
C
fly542
喜欢开源,乐于交流!从事分布式存储相关工作,QQ:634648088,MSN:feitian@hotmail.com
展开
-
pthread_key_t和pthread_key_create()的使用
线程存储, Thread Specific Data 。线程存储有什么用了?他是什么意思了?大家都知道,在多线程程序中,所有线程共享程序中的变量。现在有一全局变量,所有线程都可以使用它,改变它的值。而如果每个线程希望能单独拥有它,那么就需要使用线程存储了。表面上看起来这是一个全局变量,所有线程都可以使用它,而它的值在每一个线程中又是单独存储的。这就是线程存储的意义。 下面说一下线程存储的具体用法原创 2011-11-02 15:28:17 · 2540 阅读 · 0 评论 -
sprintf和snprintf的正确使用
关于sprintf和snprintf的正确使用。 考虑以下有缺陷的例子: void f(const char *p) { char buf[11]={0}; sprintf(buf,"%10s",p); // very dangerous printf("%sn",buf); } 不要让格式标记“%10s”误导你。如果p的长度大于10个字符,那么sp转载 2011-11-10 11:20:59 · 1076 阅读 · 0 评论 -
calloc与malloc的区别
calloc是一个C语言函数 函数名: calloc void *calloc(unsigned n,unsigned size); 功 能: 在内存的动态存储区中分配n个长度为size的连续空间,函数返回一个指向分配起始地址的指针;如果分配不成功,返回NULL。 跟malloc的区别: calloc在动态分配完内存后,自动初始化该内存空间为零,而原创 2011-11-10 13:35:31 · 1424 阅读 · 0 评论 -
list_entry剖析与验证
/* &((type *)0)->member: 把“0”强制转化为指针类型,则该指针一定指向“0”(数据段基址)。因为指针是“type *”型的, 所以可取到以“0”为基地址的一个type型变量member域的地址。那么这个地址也就等于member域到结构体基地址的偏移字节数。 ((type *)((char *)(ptr)-(unsigned long)(&((type *)0)->原创 2012-01-29 17:01:24 · 1307 阅读 · 0 评论 -
C中的volatile用法
volatile 影响编译器编译的结果,指出,volatile 变量是随时可能发生变化的,与volatile变量有关的运算,不要进行编译优化,以免出错,(VC++ 在产生release版可执行码时会进行编译优化,加volatile关键字的变量有关的运算,将不进行编译优化。)。 例如: volatile int i=10; int j = i; ... int k = i;转载 2012-10-09 16:16:29 · 996 阅读 · 0 评论