想给自己之前的日志库,加一个染色的功能
gcc 有一个自己的特性,叫 __thread,介绍可以看这里,https://gcc.gnu.org/onlinedocs…,是可以用来修饰一个全局变量,从而让这个全局变量在每个线程都有一份拷贝,例子如下:
#include <stdio.h>
#include <unistd.h>
#include <pthread.h>
#inc…… 阅读全文
Tag Archives: gcc
gcc 链接时动态库和静态库的优先选择
老话题了,不过还是记一笔
先看文件
ModuleA.cpp
int add(int a, int b)
{
return a + b;
}
ModuleB.cpp
int minus(int a, int b)
{
return a - b;
}
Main.cpp
#include <stdio.h>
int add(int, int);
int minus(int , int);
int main()
{
printf("%d\n", add(…… 阅读全文
分支预测以及 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…… 阅读全文
函数返回对象时的问题
来看这个代码
#include <iostream>
#include <string>
#include <map>
std::map<std::string, std::string> mapHttpRequest;
std::string GetString(std::string strKey)
{
std::map<std::string, std::string>::iterator it = mapHttpRequest.find(strKey);
if (it…… 阅读全文
gcc 编译时动态静态库的问题
一般来说,动态静态库的问题,可以参考这个文章,http://blog.csdn.net/ast_224/a…
gcc生成静态库和动态库
一、库文件简介
简单地说,库(Library)就是一组已经写好了的函数和变量、经过编译代码,是为了能够提高开发效率和运行效率而设计的。库分为静态库(Static Library)和共享库(Shared library)两类。静态…… 阅读全文
gcc 编译时输出有问号
今天切到一台新的机器上去开发,编译的时候发现 gcc 的输出带着问号,就像这个样子
src/BusiObj.cpp: In member function ?.nt CBusiObj::DecodeUdp(int&, int&, const char*, int)?.
src/BusiObj.cpp:287: warning: format ?.d?.expects type ?.nt?. but argument 6 has type ?.ong unsigned int?
src/Busi…… 阅读全文
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…… 阅读全文