GCC常用知识

–ThreadSanitizer检查data race
Data Race是指多个线程在没有正确加锁的情况下,同时访问同一块数据,并且至少有一个线程是写操作,对数据的读取和修改产生了竞争,从而导致各种不可预计的问题。

–内存预取
__builtin_prefetch
通过gcc指令让系统预取一部分主存内容到cpu cache中
http://stackoverflow.com/questions/7327994/prefetching-examples

–内存屏障
gcc指令设置内存屏障以保证函数内代码的执行顺序。如果没有内存屏障,如果其他线程依赖了当前线程的某个函数内的逻辑代码顺序,整体逻辑就有可能因为当前线程的代码被编译器优化打乱顺序导致出错(虽然这种设计是一个不亮的设计)。

–分支预测
__builtin_expect
gcc指令LIKELY、UNLIKELY来优化代码内的判断

#define likely(x)       __builtin_expect(!!(x), 1)
#define unlikely(x)     __builtin_expect(!!(x), 0)

–文件的查找目录(cpp,c的话自己按照名字分析)
-> 编译期
头文件:-I、/usr/include;/usr/local/include、环境变量CPATH;C_INCLUDE_PATH;CPLUS_INCLUDE_PATH;OBJC_INCLUDE_PATH
动态库文件:-L、/lib;/usr/lib;/usr/local/lib、环境变量LIBRARY_PATH
->运行期
动态库:gcc rpath编译期的预指定、/lib;/usr/lib、环境变量LD_LIBRARY_PATH、LD_PRELOAD、/etc/ld.so.conf.d ldconfig

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值