引擎中的内存管理

43 views
Skip to first unread message

jingang Y.

unread,
Sep 4, 2011, 11:28:39 PM9/4/11
to graphi...@googlegroups.com
今天看到一个老外写的内存管理模块(这个居然也可以独立出来拿来卖钱):http://www.juryrigsoftware.com/Elephant/

因为之前做过很多引擎内存管理方面的工作(诸如:内存泄漏、对象生命期、gpu与cpu内存互通等等),抛个砖头引一些讨论吧:

1. 大多数引擎现在都支持脚本操作,脚本与引擎连接时对象生命期问题怎么做比较好
2. 内存泄漏可能一直都是比较头疼的问题(纯粹new/delete不匹配造成的泄漏还好办,基于管理器的对象粒度的泄漏才头疼),引擎往往都要自己实现一套内存管理的模块,堆,池,stl的allocator等如何既适用方便又管理方便貌似是个问题


jingang Y.

unread,
Sep 4, 2011, 11:31:17 PM9/4/11
to graphi...@googlegroups.com
另外gpu gems 8上好像有一偏Memory Profiler的文章,那个malloc hook的方法一直都没看懂怎么搞

volfmath

unread,
Sep 5, 2011, 1:54:31 AM9/5/11
to GraphicsGeeks
ogre用了 NedMalloc 据说还行 。 泄漏的问题 智能指针应该能起点作用了。 毕竟c++,做任何项目都要遇到的问题。

Milo Yip

unread,
Sep 5, 2011, 1:57:06 AM9/5/11
to graphi...@googlegroups.com
自己的模塊還可以自己實現內存管理和統計,有時候對於D3D、driver和一些引用到的DLL就更麻煩。

2011/9/5 volfmath <volf...@gmail.com>:

> --
> 您收到此邮件是因为您订阅了 Google 网上论坛的"GraphicsGeeks"论坛。
> 要向此网上论坛发帖,请发送电子邮件至 graphi...@googlegroups.com
> 要取消订阅此网上论坛,请发送电子邮件至 graphicsgeek...@googlegroups.com
> 若有更多问题,请通过 http://groups.google.com/group/graphicsgeeks?hl=zh-CN 访问此网上论坛。
>
>

--
Milo Yip

Twitter @miloyip
http://www.cnblogs.com/miloyip/
http://miloyip.seezone.net/

volfmath

unread,
Sep 5, 2011, 1:59:47 AM9/5/11
to GraphicsGeeks
Milos老大是怎么做的?
我说下我自己引擎的做法:就是重载new,做内存分派和检测内存的一些问题。另外对对象的操作,用智能指针。我觉得网游里面更加重要,因为对象经常在很
奇怪的地方消失。
不过这都是比较老土的做法,不知道大家自己的项目是怎么搞的。

On 9月5日, 下午1时57分, Milo Yip <milo...@gmail.com> wrote:
> 自己的模塊還可以自己實現內存管理和統計,有時候對於D3D、driver和一些引用到的DLL就更麻煩。
>

> 2011/9/5 volfmath <volfm...@gmail.com>:

Milo Yip

unread,
Sep 5, 2011, 2:07:22 AM9/5/11
to graphi...@googlegroups.com
自製內存管理系統的話,通常會做成幾個軟件層:

1. 底層分配器,取代malloc/free/realloc/new/delete,可用dlmalloc、nedmalloc之類的實現,或fallback至CRT或custom的allocator。但一定要支持alignment。
2. debug/profile層,可以開關各種功能,例如log、leak detection、buffer overwrite
detection、statistics等
3. 高層分配器,例如pool、stack-based等等,另有STL allocator的adapter (如用STL)

另外調試層要提供工具去查找問題。

至於smart pointer或GC等又試另一套"framework"的事。不同模槐可能有不同需求。

2011/9/5 volfmath <volf...@gmail.com>:

Reply all
Reply to author
Forward
0 new messages