内存使用

务器里使用内存:没有必要的东西就不要用。对于内存比较麻烦的是内存泄露,由于服务程序运行的时间比较长,很少的内存泄露都会被放大,影响程序的正常运行。
 
1、所以尽量使用局部变量,这样代码可以重入,变量使用完后会自动释放。但大块的使用内存还是要采用其他的方案,尤其是所有的这些空间不会都使用到,因为局部部变量分配在栈中,栈中的数据基本都是频繁使用到的,在这里分配大快的空间会造成栈空间伸缩,使相应的高速CACHE失效。
 
2、对于大块内存的使用一般从堆空间中申请,使用new或malloc()使用后由delete 或free()释放。这样容易产生内存泄露,可以借助auto_ptr,进行自动释放。
 
3、在使用上面的方法进行内存分配的时候,对于小的内存空间的申请存在浪费的问题。因为每块分配的内存系统会多使用几个字节,薄记一些系统的信息。可以采用SGI STL的小内存分配方式。
 
4、内存缓冲池的方式,对与分配的内存不用的时候放到池中,分配的时候先从缓冲池中取。这样可以避免使用new或delete,因为后者肯定是线程安全的,一般会要依靠全局的锁,这样可以提供系统的运行性能。同时可以避免内存碎片的产生。缓冲池可以采用FILO策略,可以增加内存访问的局部性,提高系统的性能。我比较喜欢对关键的对象提供缓冲机制,这样可以同时避免对象构造析构的开销。
 
5、对于大块的关键的缓冲区可以采用欲分配的方式,避免在运行过程中由于没有连续的内存空间而分配失败。
 
6、对于内存复制,虽然现在内存总线的速度不慢,但是较之CPU还是慢了许多,我觉得应该尽量避免。可以采用引用计数的机制,共享单一的一份拷贝。
 
7、另外全局数组也是一个可以考虑的方式,使用的时候从数组中找一个来用。不过全局的东西不太招人喜欢,可以使用static使起在单个编译单元中可见,使用公开的接口进行访问的方式。这样做有一个好处,分析CoreDump文件的时候比较简单,直接找到内存的位置,就可以察看相应的信息。
 
8、追踪内存泄露的方式,可以使用工具,不过我不太会用,在工具的环境里启动测试运行的很慢。一些比较难发现的内存泄露都是发生在一些异常的处理流程中,在他的环境感觉比较憋气。可以采用对分配进行计数,或者MFC的DEBUG版本采用的方式,对new进行重载,多分一些内存,打个标记,进行追踪。这样对系统的运行性能基本没有什么影响,大致确定泄露的地方,再检查代码,基本可以解决。反正我是这么整。
 
9、由于服务器的环境基本可以控制,内存的限制不是太多。对于一些应用可以采用内存数据库的方式提高性能。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值