随笔分类 -  linux高效编程

摘要:1 -g3 加入宏调试,也就是能在gdb里看宏扩展后的内容2 -pipe 程序间通讯时使用管线,而不是暂存盘。GNU 组译器支持此选项。 可以缩短一些编译时间,建议使用 阅读全文
posted @ 2014-12-18 09:29 白帆mvp 阅读(221) 评论(0) 推荐(0)
摘要:public class HashAlgorithms { /** * 加法hash * @param key 字符串 * @param prime 一个质数 * @return hash结果 */ public static int additiveHash(String key, int pri... 阅读全文
posted @ 2014-11-14 10:07 白帆mvp 阅读(790) 评论(0) 推荐(0)
摘要:桶排序的核心思想就是分治处理数据,把数据按照大小分发到各个区间(区间内数据保证有序,数据结构可以使用链表,方便分发过来的新数据插入)。假设有N条数据是分布在一个固定的区间内(0,n),现在要对其排序,桶排序步骤如下1 把(0,n)划分成m个区间,像这样 (0,n/m),(n/m+1, 2n/m),(... 阅读全文
posted @ 2014-10-26 21:54 白帆mvp 阅读(201) 评论(0) 推荐(0)
摘要:这里面要重点关注的是内存 120ns固态盘 50-150us机械磁盘 1-10ms 固态盘和内存差了3个数量级,可见固态盘和内存还是很有差距的机械盘和内存差了4-5个数量级,效率惨不忍睹。所以写存储系统尽量把能干的事情干完在存磁盘,不要反复读取磁盘,考虑存储方面的算法不能只是看复杂... 阅读全文
posted @ 2014-10-22 17:22 白帆mvp 阅读(432) 评论(0) 推荐(0)
摘要:当两个字符串进行顺序匹配出现某字符匹配不正确时,被匹配字串的开始位置要回退,这是个不效率的工序,而KMP就是用来尽量减少回退的位置,使得重复工序降低。KMP算法的关键思路:1 先是按照正常的字串匹配方式进行匹配。2 一旦在匹配到第N+1项匹配失败时,计算匹配字符串前N项字串的”前缀“和”后缀“子串中... 阅读全文
posted @ 2014-10-21 17:31 白帆mvp 阅读(278) 评论(0) 推荐(0)
摘要:两种锁的加锁原理互斥锁:线程会从sleep(加锁)——>running(解锁),过程中有上下文的切换,cpu的抢占,信号的发送等开销。自旋锁:线程一直是running(加锁——>解锁),死循环检测锁的标志位,机制不复杂。两种锁的区别互斥锁的起始原始开销要高于自旋锁,但是基本是一劳永逸,临界区持锁时间... 阅读全文
posted @ 2014-05-08 14:43 白帆mvp 阅读(8863) 评论(0) 推荐(1)
摘要:C语言的指针跳转访问是一个灵活高效的机制,但是再高效也是要花费额外时间的,下面这个程序如果在gcc -O0不优化的情况,就可以看出指针跳转比直接访问要多消耗10%左右的时间#include #include int main(){ int m = 0; int *p = &m; ... 阅读全文
posted @ 2014-05-08 10:30 白帆mvp 阅读(429) 评论(0) 推荐(0)
摘要:下面这个代码用两个双层循环遍历了一个二维数组里所有的元素,以我自己机器的测试 上面那个循环耗时基本为下面的一半,两个循环的时间复杂度相同,为什么会有这么大的差别?首先要明白的是不管是几维数组,他们都是用一块地址连续的内存来存储所有的元素,而内存布局的顺序是一整行接着下一个整行排列,第一个循环是一行一... 阅读全文
posted @ 2014-05-08 10:24 白帆mvp 阅读(3797) 评论(0) 推荐(0)
摘要:因为ubuntu发行版的kernel没有调试信息,所以导致systemtap无法使用,所以得自己安装调试信息包,可能由于版本的问题,网上的很多方法,包括官方网站上提供的那个,发现各种不行(本人11.04),后来看了http://posulliv.github.com/2010/02/26/insta... 阅读全文
posted @ 2012-07-25 20:45 白帆mvp 阅读(3928) 评论(1) 推荐(0)
摘要:有时候对一个复杂的程序的局部模块进行反复调试,每次都要重新运行程序,然后在定位到模块,这样太麻烦了,我们可以gdb运行程序,然后定位到要调试的模块以后,在gdb内生成core文件,这样下次调试就直接用gdb加载这个文件就好了generate-core-file显示栈bt只显示前N栈bt N只显示后N... 阅读全文
posted @ 2012-07-21 17:00 白帆mvp 阅读(269) 评论(0) 推荐(0)
摘要:linux可以在程序出现段错误后将进程的内存空间保存在一个core格式的文件中,开发人员可用gdb读取这个文件,以了解程序挂掉时的进程空间状态linux默认配置生成core文件大小是0,也就是不生成。ulimit命令可以设置core的大小ulimit -c 1024 //core大小为1024字节u... 阅读全文
posted @ 2012-07-21 16:16 白帆mvp 阅读(354) 评论(0) 推荐(0)
摘要:#include #include int main(){ int m = 0; int *p = &m; int i =0; int n = 1; struct timeval time1, time2; m = 0; gettimeofd... 阅读全文
posted @ 2012-06-24 18:37 白帆mvp 阅读(178) 评论(0) 推荐(0)
摘要:下面这个代码用两个双层循环遍历了一个二维数组里所有的元素,以我自己机器的测试 上面那个循环耗时基本为下面的一半,两个循环的时间复杂度相同,为什么会有这么大的差别?首先要明白的是不管是几维数组,他们都是用一块地址连续的内存来存储所有的元素,而内存布局的顺序是一整行接着下一个整行排列,第一个循环是一行一... 阅读全文
posted @ 2012-06-24 18:17 白帆mvp 阅读(342) 评论(0) 推荐(0)
摘要:innodb里实现了2类很常用的互斥量,一个是mutex_t(独占形式),另外一个是rw_lock_t(读共享,写独占),innodb对其进行了改造,以适应数据库的性能要求。因为并发是innodb主打的看点,所以这两类互斥量在整个代码里面占了很重要的地位(特别是mutex_t,几乎贯穿了整个体系)... 阅读全文
posted @ 2012-06-09 14:27 白帆mvp 阅读(1270) 评论(0) 推荐(0)
摘要:innodb的mem/mem0pool.cc实现了一个高效的内存池,该模块采用的是经典的Buddy memory allocation算法(我觉得innodb并未对原算法进行什么改动)来实现内存块分配,回收,合并和拆解,这样做的一个显著优点是尽量避免了内存碎片,使得内存分配效率得到提升。介绍一下它的... 阅读全文
posted @ 2012-06-02 15:05 白帆mvp 阅读(457) 评论(0) 推荐(0)