【发布时间】:2009-02-06 15:29:13
【问题描述】:
我已经通读了源代码,并尝试在网上对其进行研究,但我在完全理解它方面遇到了障碍。
我的意思是,它与区域分配有何不同?
“区域”是否用于小内存,“大块”用于模型等较大的东西?
谢谢
【问题讨论】:
-
John 正忙于发射火箭 (armadilloaerospace.com)。能不能发一两个hunk vs. zone的相关代码示例来刷新一下记忆?
我已经通读了源代码,并尝试在网上对其进行研究,但我在完全理解它方面遇到了障碍。
我的意思是,它与区域分配有何不同?
“区域”是否用于小内存,“大块”用于模型等较大的东西?
谢谢
【问题讨论】:
是的,大块用于大的静态分配,例如纹理和几何图形,而区域用于较小的(并且可能是不稳定的)分配。
拥有两个(或更多!)这样的区域是游戏中的常见模式。这有两个原因;
1) 大多数游戏会预先分配运行所需的内存,然后从该空间执行自己的分配。这不仅比使用操作系统分配器更快,而且它阻止操作系统将你的纹理/几何/任何内容分页到磁盘。使用您自己的分配器还可以更轻松地创建代码来跟踪内存模式和泄漏。
2) 将您的小型和/或动态分配保存在单独的区域中可以避免将用于较大分配的区域分割成碎片。碎片化是以前的小分配留下“漏洞”的地方,导致连续可用空间的数量变得小于总可用空间,并且是推动内存限制的游戏的祸根:)
【讨论】: