Linux编程
fan_hai_ping
专注于C/C++开发,精通于Python
展开
-
内核中的unlikey和likely宏的说明
在内核代码中经常会看到unlikely和likely的踪影,他们实际上是定义在linux/compiler中的两个宏,定义如下。#definelikely(x) __builtin_expect(!!(x), 1) // 表示x的值为真的可能性更大#defineunlikely(x) __builtin_expect(!!(x), 0) // 表示x的值为假原创 2012-12-25 20:58:28 · 1439 阅读 · 0 评论 -
Window和Linux动态库搜索路径的次序
最近在做的项目中使用到动态库的动态加载技术,Windows和Linux都提供了相应的函数来打开动态库、获取函数指针和关闭动态库,在打开动态库函数(dlopen或LoadLibrary)中指定动态库的文件名后,在程序运行时是以什么次序来搜索动态库呢? Linux下搜索路径的次序:1) ELF可执行文件中动态段中DT_RPATH所指定的路径,不常用但是比较使用的方法;2) 编译原创 2011-09-09 14:41:27 · 5860 阅读 · 0 评论 -
TcMalloc库的使用
TcMalloc(Thread-CachingMalloc)是google-perftools工具中的一个内存管理库,与标准的glibc库中malloc相比,TcMalloc在内存分配的效率和速度上要高很多,可以提升高并发情况下的性能,降低系统的负载。 Google-perftools项目的网址为:http://code.google.com/p/google-perftools/,该项原创 2012-09-20 05:10:30 · 4669 阅读 · 0 评论 -
Linux链接库使用
1. Linux静态库1)静态库生成假设库名为libmylib.a,链接目标文件为mylib.o# ar rcs libmylib.a mylib.o2)将静态库拷贝到/usr/lib/或/lib目录下# cp libmylib.a /usr/lib3)静态库使用比如测试文件为test.c# gcc -o test test.c -lmylib其中:原创 2011-08-31 23:04:08 · 1018 阅读 · 0 评论 -
Gperftools中tcmalloc的简介和使用
TcMalloc(Thread-CachingMalloc)是google-perftools工具中的一个内存管理库,与标准的glibc库中malloc相比,TcMalloc在内存分配的效率和速度上要高很多,可以提升高并发情况下的性能,降低系统的负载。Google-perftools项目的网址为:http://code.google.com/p/google-perftools/,该项目包括T原创 2012-09-14 13:15:07 · 22614 阅读 · 0 评论 -
如何使用Valgrind内存检查工具 检查C/C++中内存泄露
系统编程的一个主要任务是有效地处理内存相关的问题。你的工作越是靠近系统,那么你就就越需要面对内容相关的问题。有时候这些问题非常的致命,很多情况下调试内存相关的问题可能变成恶魔。因此,实际使用中有许多工具可以用于调试内存相关的问题。本文中,我们讨论最流行的开源内存管理框架VALGRIND。来自Valgrind.orgValgrind是一个用于编译动态分析工具的指令框架。它提供一组工具,可以用原创 2012-11-12 10:48:09 · 5302 阅读 · 0 评论 -
动态库的gcc版本不一致造成的编译问题的解决办法
在Linux上使用更高的gcc/g++版本编译生成的动态库来链接应用程序时,会出现“/usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.14' not found”的问题。我们使用ldd检查动态库的依赖性,如下所示。[root@localhost lin32]# lddlibcxxsingletondll.so ./libcxxsingleton原创 2012-12-20 23:34:36 · 19895 阅读 · 0 评论 -
Linux 32和64位平台下支持LFS
在Linux x86(32位)系统上编译的程序放到Linux x86_64(64位)系统上运行的时候出现调用lstat或lstat函数的错误,返回的错误码值为75,错误描述为“Value too large for defined data type”。 为了让程序能够使用LFS(大文件系统),你可以选择使用下面的方法:使用gcc -D_FILE_OFFSET_BITS=64重新编译原创 2011-09-07 14:18:58 · 5024 阅读 · 0 评论 -
Linux下时间戳不同步造成编译警告的解决办法
在Linux下编译源代码时,由于时钟同步问题,出现 warning: Clock skewdetected. Your build may be incomplete.这样的警告。下面是两种解决这个问题的办法。方法一:修改所有源代码的时间后重新编译find . -type f | xargs -n 5 touchmake cleanmake方法二:修改编译环境的系统时间后重原创 2012-09-12 08:26:36 · 2884 阅读 · 0 评论 -
Glib库的安装和编译
Glib概述Glib是一个多种用途的工具库,它提供许多有用的数据类型,宏定义,类型变换,字符串工具,文件工具,主循环的抽象等等。它可以用于许多类-UNIX平台、Windows,OS/2和BeOS中。GLib在GNU库通用公共许可(GNU LGPL)下发布。GLib的主要策略是除了数据结构管理功能以外所有的功能都是线程安全的。如果你有两个线程关联系统的数据结构,他们必须使用锁来同步他们的操作原创 2011-08-15 16:52:10 · 13628 阅读 · 1 评论 -
Linux下共享内存编程
利用共享内存(Share Memory)可以让我们在任意两个进程之间传递数据,而且也是相对容易实现的一种方法,在正常情况下,一个进程所使用的内存是不允许其它进程访问的,但是通过共享内存可以实现数据的共享。 使用共享内存用到的API函数有:# include #include #include key_t ftok(const char *pathname, int原创 2011-08-12 15:26:49 · 5277 阅读 · 0 评论 -
如何使用gdb调试C程序
本文中,我们讨论如何在6个简单步骤下使用gdb调试器调试C程序。为了调试目的编写一个带有错误的C程序示例。为了学习C编程调试,让我们创建下面C程序,它计算并且打印一个数的阶乘。然而该C程序包括一些错误,它是为了我们调试目的而为。$ vim factorial.c# include int main(){ inti, num, j;原创 2012-11-14 08:47:39 · 2010 阅读 · 0 评论 -
Linux下网卡驱动和版本信息
本文档描述如何查看Linux下网卡驱动和版本信息!!原创 2014-10-24 08:46:29 · 5763 阅读 · 0 评论