–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