动态链接库中的全局变量

想给自己之前的日志库,加一个染色的功能 gcc 有一个自己的特性,叫 __thread,介绍可以看这里,https://gcc.gnu.org/onlinedocs…,是可以用来修饰一个全局变量,从而让这个全局变量在每个线程都有一份拷贝,例子如下: #include <stdio.h> #include <unistd.h> #include <pthread.h> #inc……

阅读全文

分支预测以及 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……

阅读全文

gcc 编译时动态静态库的问题

一般来说,动态静态库的问题,可以参考这个文章,http://blog.csdn.net/ast_224/a… gcc生成静态库和动态库 一、库文件简介 简单地说,库(Library)就是一组已经写好了的函数和变量、经过编译代码,是为了能够提高开发效率和运行效率而设计的。库分为静态库(Static Library)和共享库(Shared library)两类。静态……

阅读全文

gcc 编译选项顺序导致的找不到定义

在使用 gcc 或者 g++ 进行编译,并链接外部的库的时候,发现了一个问题,明明使用了 -L 参数对库文件指明了链接,但是依然出错,报找不到定义,后来问过小组的人,才知道 gcc 的编译选项也有讲究的,看到这里,http://blog.csdn.net/lonfee88/…: 对于C/C++编译而言,读取编译选项是按照从左到右的顺序执行的(注1)……

阅读全文

GCC “-fomit-frame-pointer”编译选项的含义

在 makefile 中看到这个编译选项,不太理解于是查了一下,相关的东西还不多,抄一下放在这里 首先这个文章,http://blog.csdn.net/byzs/arti…,讲的不错,挺清晰的: 优化你的软件时,发觉”-fomit-frame-pointer”这个选项还是蛮有用的。 GCC手册上面这么说: Don’t keep the frame pointer in a……

阅读全文

printf 一定需要 stdio.h 吗

刚刚看到一个范例代码,调用了 printf 函数,但是却没有包含 stdio.h 的头文件,这种写法第一反应就应该是不对的啊,本着动手实验的原则,试了一下 zrj@vm:~/c/test$ cat test.c int main() { printf("hello worldn"); return 0; } zrj@vm:~/c/test$ gcc -o test test.c test.c: 在函数‘main’中: t……

阅读全文