AD商业广告自由选择
AD商业广告自由选择

探讨【IGE】的源代码【六】,承接【五】,内存池管理

正文概述 开源人   2024-11-03 16:15:33  

上篇,我们提到了内存创建和释放带给长时间运行的服务器性能的损害问题。NOR1234FCOM专注游戏工具及源码例子分享

  当然还可能增加了CPU的相当的开销。NOR1234FCOM专注游戏工具及源码例子分享

  那么如何解决这个问题呢。NOR1234FCOM专注游戏工具及源码例子分享

  在这里只做一些讨论,具体实现,是你自己的事情。NOR1234FCOM专注游戏工具及源码例子分享

  到目前为止,我们能够做的都是管理一个内存池。NOR1234FCOM专注游戏工具及源码例子分享

  一开始,我们先分配好一批内存,把这批内存标注为空闲。NOR1234FCOM专注游戏工具及源码例子分享

  在客户端连接入来的时候,从空闲链表里面取第一个结构指针,填充内存。NOR1234FCOM专注游戏工具及源码例子分享

  Delete(0);删除空闲链表索引,是删除,不是释放,这个要记住。NOR1234FCOM专注游戏工具及源码例子分享

  然后使用一个正在使用链表来管理已经被调用的内存,使用ADD操作。NOR1234FCOM专注游戏工具及源码例子分享

  那么跟客户端断开连接后,将该释放的或者需要置Nil的对象处理之后。NOR1234FCOM专注游戏工具及源码例子分享

  从正在使用的链表删除该指针索引,然后把内存“归还”给空闲链表。NOR1234FCOM专注游戏工具及源码例子分享

  其实这个操作完全就是指针管理,效率如何,这个还要问????NOR1234FCOM专注游戏工具及源码例子分享

  实际内存分配好后,释放的时候只是标识释放而已,并没有返回给操作系统,不会带来内存碎片的问题了。而且CPU占用率肯定低很多。NOR1234FCOM专注游戏工具及源码例子分享

  也许大家说,一开始分配多少合适,看你自己的需要而定。NOR1234FCOM专注游戏工具及源码例子分享

  如果不够怎么办,不够就再分配了。  NOR1234FCOM专注游戏工具及源码例子分享

  其实每一个服务器都有额定的连接数目限制。所以你可以设置一个合适你自己的数目,超过该数目,直接忽略就行,或者怎么做,你自己可以定。NOR1234FCOM专注游戏工具及源码例子分享

  如果一台服务器,我最多允许5000个连接,那么就设置为5000。超过后,发送信息给客户端,让它连接另外的服务器也行。NOR1234FCOM专注游戏工具及源码例子分享

  一般情况下,是不是这样操作???NOR1234FCOM专注游戏工具及源码例子分享

  总之,服务器编程,你必须管理内存池,这个是肯定的。除非你的服务器三头两天就重启一次。NOR1234FCOM专注游戏工具及源码例子分享

  没有内存池概念你就不要进服务器编程的范围。  NOR1234FCOM专注游戏工具及源码例子分享

  至于具体做法,各人不同,都是按照自己的喜好来做,能够实现,没有内存泄露就行了。NOR1234FCOM专注游戏工具及源码例子分享



声明:本文系互联网搜索而收集整理,不以盈利性为目的,文字、图文资料源于互联网且共享于互联网。
如有侵权,请联系 yao4fvip#qq.com (#改@) 删除。