native-memory

Native memory

Native Memory

  • Native 是分配给任何游戏资源的本地内存,比如 纹理资源,模型资源。

  • 这边的实例化后的内存占用不会被自动释放。

  • 在语言设计方面,C# 不允许在 Native 处申請分配内存,因为这可能会导致内存泄漏。

  • UnityEngine 利用 C# 的 unsafe 代码,构建出了 NativeContainer 系列结构。

  • NativeContainer 在 Native 区域分配和释放内存。

  • NativeContainer 集合系列包括 Array , List, HashMap 等常用集合结构。

  • 在设置的生命时间结束后, NativeContainer 自动回收对应内存。

好处

  • 可直接修改 Native 区域的资源文件,以往修改资源文件需要将其实例化 Clone 到 Heap,在写回 Native,再回收 Heap

  • Burst 编译器无法编译堆区内容(类?),可以使用 Native Container 来代替 STL Container。

  • 对多线程的支持,这边涉及到 GC 的回收机制,GC 通常会在 main 方法中遍历出所有引用到的堆内存中的对象,对于没有遍历到的对象,将进行自动垃圾回收。在多线程中,子线程引用的对象可能不会被主线程引用到,为了不被回收,使用 NativeContainer

Reference

最后更新于