指的是Unity文档中的这一部分:
大堆,垃圾回收缓慢但不频繁
var tmp = new System.Object[1024];
// make allocations in smaller blocks to avoid them to be treated in a special way, which is designed for large blocks
for (int i = 0; i < 1024; i++)
tmp[i] = new byte[1024];
// release reference
tmp = null;
这个技巧的关键在于程序启动时预分配一些内存块。
为什么这个技巧会起作用呢?
这些块是否在被预分配时被“注册”(或“绑定”)到应用程序中,以至于即使当Start()
结束并释放tmp
时,操作系统仍将这些块视为已“注册”到该应用程序中?
由于这些块已经“注册”到应用程序中,因此应用程序的堆大小扩展到了某个大小,下次获取内存块时,操作系统将直接从该应用程序的堆中选择。
我的解释正确吗?不管是不是,请有人详细解释一下,谢谢。