关注内存 提高软件性能
2008-04-27 18:49
204 查看
本文主要讨论2个问题:1. C++中的gc(垃圾回收)问题.2. 如何提高内存的使用效率,改善程序的性能一. C++中的gc在java,c#中在创建对象的时候,你只需要调用new,而根本不需要去delete.因为这项工作交给由语言内嵌的机制实现了.当一个对象不用的时候,会由这种机制来实现垃圾收集,把资源归还给os的任务.而c++就没这么幸运了.你必须自己负责显示的条用new,delete来显示负责资源的分配和资源的回收.稍有不慎就会出现memory leak.memory leak的严重性我就不说了.我想在这里实现的东西是想讲讲几种gc实现的思路.或者谈不上是垃圾回收吧.只是想做到象java,c#里面一样,只用显示调用new,而不用delete,在对象生命终结的时候会自动释放内存.我想用比较简单的代码来模拟这种思路.最经典的就是智能指针吧.或者我下面的思路有点象智能指针.呵呵.不过是个简化的了. #include<iostream>using namespace std; class smpPointer{public: smpPointer(void * p) { _p = p; } ~smpPointer() { delete _p; }private: void* _p;};class A {public: A(){ cout<<"Ctor();"; } };void main(){ A* pointer = new A; smpPointer ptr(pointer); }上面这种实现看起来总是有点不自然,调用new之后必须在栈上分配一个smppointer对象.当程序退出的时候(或者函数运行完毕时候),栈上的对象会销毁,这样就可以自动调用smppointer的析够函数,从而释放内存了.我们再看下面的版本.基本思路是这样的:用一个链表把每次对象分配的时候分配在何处的位置记下来,放在一个链表中.最后统一回收.实现这种思路的时候,必须为每1个需要改特性的类重载new,delete操作符.也不是很好. 版本2 #include<iostream>#include <list>using namespace std; list<void*> memlist;//分配内存块的指针所链接成的双向链表 class A {public: A() { cout<<"ctor A"; } ~A(){ cout<<"detor A"; } void* operator new(size_t size) { void* p = malloc(size); memlist.push_front(p); return p; } void operator delete(void *p) { free(p); }};void Destroy(){ memlist.clear(); } void fun(){ A* pa = new A; A* pb = new A; A* pc = new A; cout<<"memlist has: " << memlist.size() <<endl; Destroy(); } void main(){ fun();cout<<"now memlist has "<< memlist.size(); }
相关文章推荐
- 关注内存 提高软件性能(2)
- 关注内存 提高软件性能
- 关注内存 提高软件性能(3)
- 关注内存 提高软件性能(2)
- 关注内存 提高软件性能(3)
- AS/400开发经验点滴(八)使用共享文件打开提高软件性能
- 频繁分配释放内存导致的性能问题的分析 --(附)malloc分配原理浅析 mmap关注焦点 如何优化分配内存
- 使用内存映射文件来提高你程序的性能
- 深度解读Facebook刚开源的beringei时序数据库——数据压缩delta of delta+充分利用内存以提高性能
- 使用内存映射文件来提高你程序的性能
- 配置内存中OLTP文件组提高性能
- 一个Web报表项目的性能分析和优化实践(三) :提高Web应用服务器Tomcat的内存配置,并确认配置正确
- (转)!!频繁分配释放内存导致的性能问题的分析 --(附)malloc分配原理浅析 mmap关注焦点 如何优化分配内存
- 关于优化内存 提高软件运行效率的 写的真的很不错
- Intel软件大会——提高多核cpu windows应用程序性能,高性能计算优化(待改)
- 使用内存映射文件来提高你程序的性能
- 提高网站的性能之一:关注前端的性能
- [软件渲染器入门]四-额外章节,使用技巧和并行处理来提高性能
- Redis使用TCMalloc提高内存分配性能
- 精品软件 推荐 硬盘性能提升工具 Primo Ramdisk 内存虚拟成硬盘软件