摘要:
《C++应用程序性能优化::第六章内存池》学习和理解&&最后的总结说明:《C++应用程序性能优化》 作者:冯宏华等 2007年版。 内存的申请和释放对一个应用程序的整体性能影响极大,甚至在很多时候成为某个应用程序的瓶颈。消除内存申请和释放引起的方法往往是针对内存使用的实际情况提供一个合适的内存池。内存池之所以能够提供性能,主要是因为它能够利用应用程序的实际内存使用场景中的某项&ld... 阅读全文
摘要:
《C++应用程序性能优化::第五章动态内存管理》学习和理解说明:《C++应用程序性能优化》 作者:冯宏华等 2007年版。2010.8.29cs_wuyg@126.com 这一章不错,之前对new和delete的理解并不是很深。虽然学C++primer的时候懂一点智能指针,但是没学过boost的智... 阅读全文
摘要:
《C++应用程序性能优化::第四章操作系统的内存管理》学习和理解说明:《C++应用程序性能优化》 作者:冯宏华等 2007年版。2010-8-24开始cs_wuyg@126.com 听说不关注内存的C++高手,是伪高手。对C++的内存学习非常重要,继续学习理解。 长期以来,在计算机系统中,内存都是一种紧缺和宝贵的资源,应用程序必须在载入内存后才能执行。以前,在内存空间不够大时,同时运行的应用程序的数量就会受到很大的限制。甚至当某个应用程序在某个运行时所需内存超过物理内存时,该应用程序就会无法运行。现代操作系统的内存管理都能解决这个问题,解决方法就是虚拟内存的引入。 本质上虚拟内存就是要让一.. 阅读全文
摘要:
《C++应用程序性能优化::第二章C++语言特性的性能分析》学习和理解说明:《C++应用程序性能优化》 作者:冯宏华等 2007年版。最近出了新版,看了目录,在前面增加了一章的内容,其它的没变。知识点:分析可能引起性能下降的几个方面:构造函数/析构函数,继承与虚拟,临时对象,内联函数1、性能瓶颈 很多时候,一个程序的速度在框架设计完成时大致已经确定了,而并非是因为采用了C++语言才使其速度没有达到预期的目标。当遇到性能问题时,首先应该检查和反思程序的总体框架。然后用性能检测工具对其实际运行做准确地测量,再针对瓶颈进行分析和优化,这才是正确的思路。确实有一些操作或者C++的一些语言特性比其它因. 阅读全文
摘要:
《C++应用程序性能优化::第一章C++对象模型》学习和理解一、C++程序占用的内存区一般分为如下5种:1、 全局/静态数据区;2、 常量数据区;3、 代码区;4、 栈;5、 堆。二、对齐 字符串常量存储在常量数据区,而且是4个字节对齐的。通过new\malloc获取的内存是堆中的内存,按照16字节对齐。三、静态成员 如果要在同一个类的多个对象之间共享数据,可以使用全局变量,但这样会破坏类的封装性... 阅读全文
摘要:
C++之this指针与另一种“多态”2010-7-9烛秋一、引入 定义一个类的对象,首先系统已经给这个对象分配了空间,然后会调用构造函数(说明:假设存在构造函数--2010.9.5修正)。一个类有多个对象,当程序中调用对象的某个函数时,有可能要访问到这个对象的成员变量。而对于同一个类的每一个对象,都是共享同一份类函数。对象有单独的变量,但是没有单独的函数,所以当调用函数时,系统必须让函数知道这是哪个对象的操作,从而确定成员变量是哪个对象的。这种用于对成员变量归属对像进行区分的东西,就叫做this指针。事实上它就是对象的地址,这一点从反汇编出来的代码可以看到。二、分析1、测试代码://////. 阅读全文
摘要:
编译器对临时变量的优化--简单理解2010-7-6烛秋2010-8-20整理一、问题来源 之前对NRV优化做了一点总结,还有所欠缺,只分析了 A b = f();的情况,没有去分析A b; b = f();的情况。又想起之前看过的书,对产生临时对象的讲解都是假设了编译器没有进行优化,然后说要提高C++程序性能,必须尽量的少使用返回对象,因为那样才不会产生临时对象。多使用引用/指针可以减少临时对象的产生,提高程序性能,这个观点没有错。但事实上很多编译器多做了优化,使得临时对象的产生减少了很多,打算以最简单的例子对编译器的优化做简单的理解。代码:/**//////////////////////. 阅读全文
摘要:
自己动手理解NRV优化2010.6.29烛秋2010.8.20整理说明:本文整理自:http://blog.csdn.net/wuxupeng999/archive/2010/06/29/5701513.aspx一、NRV的简单理解 NRV是Named Return Value的简称。NRV优化简单的说:有一条语句,A a = f();其中f()是一个函数,函数里边申请了一个A的对象b,然后把对象b返回。在对象返回的时候,一般情况下要调用拷贝函数,把函数f()里边的局部对象b拷贝到函数外部的对象a。但是如果用了NRV优化,那就不必要调用拷贝构造函数,编译器可以这样做,把a的地址传递进函数f(. 阅读全文
摘要:
C实现“动态绑定”2010-7-26烛秋在论坛上看到这样一个问题:“用C能实现C++的动态绑定吗?”网址:http://topic.csdn.net/u/20100624/21/3d7eda37-cbf7-4e36-a549-f2d6f1a3eeed.html?47092。。现在看当时我的回复(ID:wuxupeng999),觉得理解上还是有些不足,... 阅读全文
摘要:
虚函数表里边保存的不一定是虚函数的地址 我一直以为虚函数表里边保存的就是虚函数的地址,前几天做测试的时候才发现这想法不一定是对的。测试代码://虚函数表里边保存的不一定是虚函数的地址.cpp//2010.8.19/*分析:通过最后的输出结果可以发现,通过Derived类的虚函数表调用所有的虚函数,发现第一张虚函数表的输出①和第二张虚函数表的输出④它们是同一个函数的输出,在虚函数表项上的值却是不同的。如果虚函数表上的项的值都是虚函数的地址,那么Derived的两张表里边用于调用show()函数的表项的值应该是相同的,但事实上它们不同。这说明,虚函数表里边保存的未必就是虚函数的地址。这种情况在之. 阅读全文