有人可以解释 Quake 3's ' hunk' 吗?

标签 c memory

我已经通读了源代码,并尝试在线研究它,但我在完全理解它方面遇到了瓶颈。
我的意思是,它与区域分配有何不同?

“zone”是否用于小内存,而“hunk”用于模型等较大的东西?

谢谢

最佳答案

是的,hunk 用于大型静态分配,例如纹理和几何体,而 zone 用于较小的(并且可能是不稳定的)分配。

像这样拥有两个(或更多!)区域是游戏中的常见模式。这有两个原因;

1) 大多数游戏会预分配它们运行所需的内存,然后从该空间执行它们自己的分配。这不仅比使用操作系统分配器更快,而且它会阻止操作系统将您的纹理/几何图形/任何内容分页到磁盘。使用您自己的分配器还可以更轻松地创建代码来跟踪内存模式和泄漏。

2) 将您的小型和/或动态分配保留在单独的区域中,避免分散用于较大分配的区域。碎片化是之前的小分配留下“漏洞”的地方,导致连续可用空间量变得小于总可用空间量,并且是插入内存限制的游戏的祸根:)

关于有人可以解释 Quake 3's ' hunk' 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/520714/

相关文章:

我可以从 Xenomai 实时任务访问非 RT 共享内存对象和互斥量吗?

c - 通过引用函数传递结构后访问结构指针

C GTK通过ESC关闭后无法再次打开Dialog

java - hibernate :内存问题?缺点?

c - 如何使用句柄检索流程描述和公司名称?

c - 指向嵌套结构中的结构的指针

C++ - 如何调用创建者类/对象

Android 应用程序在某些手机上使用的 RAM 多于最大堆大小

python - 多处理——使用管理器命名空间来节省内存

javascript - jQuery:展开 HTML 字符串中的元素