09 2012 档案

性能分析工具gprof介绍
摘要:性能分析工具gprof介绍Ver:1.0目录1. GPROF介绍 42. 使用步骤 43. 使用举例 43.1 测试环境 43.2 测试代码 43.3 数据分析 53.3.1 flat profile模式 63.3.2 call graph模式 74. 链接库中的函数 75. 使用局限 86. 分析示例 12%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%1. gprof介绍gprof是GNU profile工具,可以运行于linux、AIX、Sun等操作系统进行C、C++、Pascal、Fortran程序的性能分析,用于程序的性能优化以及程序瓶颈问题的查找和解 阅读全文

posted @ 2012-09-11 16:13 山本二十八 阅读(1327) 评论(0) 推荐(0)

【转】makefile的双冒号规则
摘要:在编译一个软件包时看见下面rules文件中出现“binary-predeb/gir1.0-unique-1.0::”,对这里的双冒号很是不解,经查阅资料,才明白一点儿。#!/usr/bin/make-finclude/usr/share/cdbs/1/class/autotools.mkinclude/usr/share/cdbs/1/rules/debhelper.mkinclude/usr/share/cdbs/1/rules/simple-patchsys.mkinclude/usr/share/cdbs/1/rules/utils.mkinclude/usr/share/cdbs/1/ 阅读全文

posted @ 2012-09-10 10:43 山本二十八 阅读(1325) 评论(0) 推荐(1)

堆排序
摘要:make_heap, push_heap, pop_heap, sort_heap“堆”定义 n个关键字序列Kl,K2,…,Kn称为(Heap),当且仅当该序列满足如下性质(简称为堆性质): (1)ki<=k(2i)且ki<=k(2i+1)(1≤i≤ n),当然,这是小根堆,大根堆则换成>=号。//k(i)相当于二叉树的非叶结点,K(2i)则是左孩子,k(2i+1)是右孩子 若将此序列所存储的向量R[1..n]看做是一棵完全二叉树的存储结构,则堆实质上是满足如下性质的完全二叉树: 树中任一非叶结点的关键字均不大于(或不小于)其左右孩子(若存在)结点的关键字。看如下代码:#in 阅读全文

posted @ 2012-09-10 10:16 山本二十八 阅读(163) 评论(0) 推荐(0)

静态链接库顺序问题
摘要:前几天,遇到一个在hpux机器上,一个程序链接时既使用了动态库,又使用了静态库,而且把静态库放在动态库的前面。链接时报找不到符号的错误。而该符号已经在静态库中定义了。 今天恰好在 《C专家编程》中找到答案,如下: 在动态链接和镜头链接的语义上有一个巨大差别,archive(静态库)与共享对象(动态库)的动作不同。在动态链接中,所有的库符号进入输出文件的虚拟地址空间中,所有的符号对于链接在一起的所有文件都是可见的。相反,对于静态链接,在处理archive时,它只是在archive中查找载入器当时所知道的未定义符号。因此,使用静态链接的过程中,引入静态链接库的顺序是很重要的。如果相同的符号在... 阅读全文

posted @ 2012-09-09 22:30 山本二十八 阅读(2155) 评论(0) 推荐(0)

编译期断言
摘要:书中列出三种编译期断言的实现方式,一一列出:CompileTimeAssertion.h//第一个版本使用不能建立空数组的性质#defineSTATIC_CHECK1(expr)\{\charunnamed[(expr)?1:0];\}//第二个版本使用模板的非类形参,使用为定义类是违法的template<bool>structCompileTimeError;//声明一个模板template<>structCompileTimeError<true>{};//仅仅对模板参数为true的特化实现#defineSTATIC_CHECK2(expr)\(Comp 阅读全文

posted @ 2012-09-03 08:16 山本二十八 阅读(346) 评论(0) 推荐(0)

函数适配器之绑定器
摘要:标准库定义了两个绑定器适配器:bind1st和bind2nd。每个绑定器接受一个函数对象和一个值。bind1st将给定值绑定到二元函数对象的第一个实参,bind2nd将给定值绑定到二元函数对象的第二个实参。例如,为了计算一个容器中所有小于或等于10的元素的个数,可以这样给count_if传递值: count_if (vec.begin(), vec.end(), bind2nd(less_equal<int>(), 10));详细代码可查看 boost源码或者 vc源码 (functional) 阅读全文

posted @ 2012-09-01 10:14 山本二十八 阅读(295) 评论(0) 推荐(0)

C++箴言:理解typename的两个含义
摘要:问题:在下面的 template declarations(模板声明)中 class 和 typename 有什么不同?template<class T> class Widget; // uses "class"template<typename T> class Widget; // uses "typename" 答案:没什么不同。在声明一个 template type parameter(模板类型参数)的时候,class 和 typename 意味着完全相同的东西。一些程序员更喜欢在所有的时间都用 class,因为它更容易 阅读全文

posted @ 2012-09-01 09:57 山本二十八 阅读(183) 评论(0) 推荐(0)

导航