Recent Posts
-
November 12, 2012
Linux动态链接库的加载 查找so文件相关的命令和配置
ldd 查看依赖的 动态链接库。objdump -p /path/to/program | grep NEEDEDman ld.so 解释 ld.so 是如何搜索 动态链接库的。 ldconfig 配置ld.so 的搜索路径配置,生成cache那些readelf -d 查看编译时指定的 DT_SONAME DT_RUNPATH 等的值。ld -soname 等链接选项。 一般修改 /etc/ld.so.conf 指定路径...
-
November 09, 2012
Linux编译动态链接库so避免运行时才发现函数未定义符号的错误undefined symbol的ld参数
ldd 查看 elf文件依赖的 so 动态链接库 可以 export LD_LIBRARY_PATH=/path 设置 so文件的路径,nm -u *.so 或者 nm |grep U 查看 那些在 动态链接库中的符号。 "U" The symbol is undefinedundefined的 symbol 这种就是表示 在其他 so动态链接库里面定义的。但是如果你的编译的 是so文件,如果符号不在外部任何so文件里面,默认的配置也不会提示错误。而是编译通...
-
October 19, 2012
一个打字练习小程序
一直以来我打字都比较慢啊。刚刚断网,弄个小程序,来练习一下数字键,特殊字符什么的。下次每天来练习几分钟。我就不信我敲键盘还要看键盘。using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;names...
-
October 15, 2012
Linux文件写入流程 从vfs层通用block层到scsi磁盘驱动
之前对scsi层和vfs层有点大概的了解。想学习一下通用block层的 page cache 和 那些电梯算法之类的。但还是没什么时间认真去看啊,那个东西也算比较复杂的。大概看下面这个书和简单浏览了一下源码。这书确实够经典啊,以前就全部大概翻了一下,但我读书一般也是很粗略的过一边,没什么印象。现在再去看,很多东西其实讲的还是很清楚的。后来在chinaunix论坛的 内核源码 模块也看网友发的帖子,也列了详细的文件读取和写入调用过程了。我还是自己参考找了一遍,关键是想了解不同的数据结构是怎么...
-
September 12, 2012
大概浏览了一下 apache thrift的源代码
下载LOFTER我的照片书 |代码很容易看,结构设计的很好啊!参见http://thrift.apache.org/docs/concepts/ 的说明,抽象出 server Processor Protocol Transport四个 接口后,代码的层次分明,读起来很容易,确实值得学习啊! 然后再这这个基本接口上面,继承实现各种模型。processor : StatsProcessor.h PeekProcessor.h TAsyncProcessorprotoco...
-
September 01, 2012
如何用perf分析程序缓存访问性能(转)
微博看到有人分析一篇文章 “Memory Access Patterns Are Important”通过java的例子来测试 内存访问时的“线性访问” “随机跨page访问” “随机跨大范围的heap访问”, 当然是第一个缓存局部性好,混存命中率更好了。文章结合源码和perf使用的例子,用perf查看程序的 第一级 第二级 第三级缓存的命中率, Translation Lookaside Buffers (TLBs) 命中,Hardware Pre-Fetchers等,实在是个不错的参...
-
September 01, 2012
Zeromq抱怨c++ 第二篇,导致内存碎片化
http://www.250bpm.com/blog:8前面第一篇说的c++的异常处理机制,这个说的面向对象的设计导致的内存碎片化。都很有道理,我也是很赞同文章的观点的。前段时间我也文章所说的list的删除和内存碎片问题。当时用 stl的list来做 队列,cancel操作的时候发现想把元素自身从队列删掉,c++的支持根本就不行,默认的删除是O(n)的,后来是就是按照 linux内存的list 自己实现了队列,也就是 文章所说的c方式的实现。再后来发现使用 iterator 也是可以做到 ...
-
August 02, 2012
Linux 内核 ftrace 实现原理 和gcc的性能分析选项 Pg
在这里http://www.ibm.com/developerworks/cn/linux/l-cn-ftrace/index.html 看到 ftrace的实现原理,觉得很有意思的用法。 linux 内核里面配置了开启ftrace之后,利用 gcc 的 -pg 选项,让每个内核函数的开头自动插入调用 mcount函数的代码。gcc 的 -pg选项是为了性能测试用的,但不知道ftrace还能利用到这点。ftrace实现了自己的mcount函数,这样就可以在每个内核函数调用到的时候i进...
-
June 14, 2012
C++字符串查找和匹配相关数据结构trie ,radix Tree,hat Trie,hash table和最好的字符串哈希函数fnv 1a
现在认为Murmurhash3 和CityHash 还有SpookyHash都比fnv这个算法要快吧。参考http://gmd20.blog.163.com/blog/static/16843923201362985128582/Trie 就是字典树http://en.wikipedia.org/wiki/Trie里面有个rie和 red black tree (红黑树)和hash table的性能比较的图,也有一些特点对比的介绍Gnu c++ std 的实现里面的容器http://gc...
-
June 14, 2012
C++ std list 是可以做到像linux 内核的list一样o(1)复杂度把元素从链表里面删掉的(std iterator的用法)
之前不知道iterator 还可以这样使用啊,搞到我想自己写了类似Linux内核的一个list的实现。可以把 list<Request*>::iterator 其实就是链表节点来的,整个list的其他元素的添加删除不会影响到你这个iterator 的。所以插入元素到list容器的时候,顺便把:iterator 这个也保存到元素自己一个子变量。然后需要删除的时候,根据iterator来删除就可以了。vector那些的iterator 类似普通的数组指针,但vector会自动...