2020年7月21日

摘要: gprof 生成函数调用关系以及调用次数,并统计耗时。用于优化代码或发现隐藏的问题。 示例 示例代码 1 #include <stdio.h> 2 3 void FunB() 4 { 5 int a = 1; 6 int b = 2; 7 int c; 8 for(int i = 0; i < 10 阅读全文
posted @ 2020-07-21 19:33 NoSoul.Love 阅读(272) 评论(0) 推荐(0) 编辑
 
摘要: Cppcheck Cppcheck是一种C/C++代码缺陷静态检查工具,不同于C/C++编译器及其它分析工具,Cppcheck只检查编译器检查不出来的bug,不检查语法错误。执行的检查包括: 1. 自动变量检查 2. 数组的边界检查 3. class类检查 4. 过期的函数,废弃函数调用检查 5. 阅读全文
posted @ 2020-07-21 19:00 NoSoul.Love 阅读(358) 评论(0) 推荐(0) 编辑
 
摘要: SCons scons是一个Python写的自动化构建工具。每次构建时,会自动执行必要的命令以及重建必要的组件(即整个项目如果只修改了一份源代码文件,将仅重新构建跟这份源代码相关的组件)。 默认构建时,将自动查找当前目录是否存在SConstruct、Sconstruct、sconstruct的文件( 阅读全文
posted @ 2020-07-21 18:53 NoSoul.Love 阅读(365) 评论(0) 推荐(0) 编辑
 
摘要: Valgrind Valgrind是一款用于内存调试、内存泄漏检测以及性能分析的软件开发工具。该工具内部又包含多个子工具集(如memcheck, cachegrind, callgrind, helgrind等等),每个子工具集相互独立,每一次分析只能选择一个子工具,默认子工具为memcheck。 阅读全文
posted @ 2020-07-21 17:02 NoSoul.Love 阅读(338) 评论(0) 推荐(0) 编辑

2015年10月28日

摘要: 挂载分区mount /dev/sdaX /mnt/挂载其他mount --bind /dev/ /mnt/dev/mount --bind /proc/ /mnt/proc/mount --bind /sys/ /mnt/sys/更改工作目录chroot /mnt/手动修复退出重启exitreboo... 阅读全文
posted @ 2015-10-28 11:01 NoSoul.Love 阅读(188) 评论(0) 推荐(0) 编辑

2015年2月12日

摘要: 初始状态下只有一个源代码文件nosoul@linux:testCov> lstest.cnosoul@linux:testCov>第一步:编译、链接、执行可执行文件gcc -o a -coverage test.c -lgcov && ./a这时会生成所需的记录文件(*.gcda,*.gcno)no... 阅读全文
posted @ 2015-02-12 12:10 NoSoul.Love 阅读(1013) 评论(0) 推荐(0) 编辑

2013年9月5日

摘要: 将排列(abcdef)应用(cdfbea),那么它的逆为(cdfbea)应用(abcdef)等价于(abcdef)应用(fdabec)所以(cdfbea)的逆为(fdabec)算法A流程 E1.获取当前的替代X,X[i]表示i被X[i]代替,将m从1到n遍历(全部遍历,与起始点无关),设j为任意负值. E2.获取当前的i=X[m],如果当前X[m]0,则回E3;否则将X[m]=-j; E5.m自增加1.如果m>n,算法结束.证明 某排列的逆可以分为1~n个部分,每个部分可以看作一个环.通过遍历,对于每个点所在的环,要么已经遍历过要么没有遍历过,对于没有遍历过的,一开始这个环上的某个节点. 阅读全文
posted @ 2013-09-05 19:22 NoSoul.Love 阅读(370) 评论(0) 推荐(0) 编辑
 
摘要: 假设我们已有6个元素{a,b,c,d,e,f},我们要将这6个元素的一个序列改成另一个序列 比如:a b c d e f ---> c d f b e a我们可以采用“循环记号”标记上面的改变 (acf)(bd)表示为a-->c,c-->f,f-->a,b-->d,d-->b在一个排列之后我们又可以应用另一个排序,我们可以将两个排列相乘| a b c d e f | |a b c d e f | | a b c d e f || | * | | = | || c d f b e a | | b d c a f e | | c a... 阅读全文
posted @ 2013-09-05 14:45 NoSoul.Love 阅读(670) 评论(0) 推荐(0) 编辑

2013年9月1日

摘要: 给定两个正整数m和n,我们计算它们的最大公因子d和两个整数a和b,使得a*m+b*n=d算法流程 E1.置a'=b=1;a=b'=0;c=m,d=n; E2.计算d和r,使得c=q*d+r; E3.若r==0;则退出,当前已有a*m+b*n=d; E4;c=d;d=r;t=a';a'=a;a=t-q*a;t=b';b'=b;b=t-q*b;返回E2.证明 递归版本: 对于已有的m和n,假设m>n;如果刨除变量a,b,a',b';算法与欧几里得算法完全一样,为计算最大公约数的算法. 最终要求的为a*m+b*n=d=GCD(m, 阅读全文
posted @ 2013-09-01 14:34 NoSoul.Love 阅读(302) 评论(0) 推荐(0) 编辑
 
摘要: 给定两个正整数m和n,求它们最大公因子,即能整除m和n的最大正整数(a=b*c,则b和c都能整除a)算法流程 E1.以n除m,r为所得的余数(0<=r<n) E2.如果r为0,算法解决,n为答案 E3.m=n,n=r;返回步骤E1证明 对于任意正整数q,存在m=q*n+r 1)如果r==0;n即为最大公约数 2)如果r!=0;对于任意m和n的公约数g; 因为r=m-q*n,所以g能整除r; 所以m和n的公因子集合与n和r的公因子集合相同 所以GDC(m,n)=GCD(n,r)=GCD(n,m%n)代码实现int GCD(int m,int n){ int r; ... 阅读全文
posted @ 2013-09-01 11:51 NoSoul.Love 阅读(205) 评论(0) 推荐(0) 编辑