版本:Unity 6 (6000.0)
语言:English
Bucket 分配器
线程本地存储 (TLS) 栈分配器

双线程分配器

双线程分配器是一个包装器,它将动态堆bucket分配器结合起来。更具体地说,它结合了

  • 两个动态堆分配器:一个用于主线程的无锁分配器,以及一个用于所有其他线程的分配器,它在分配和释放时锁定。Unity 使用这些分配器来进行对于 bucket 分配器来说太大的分配。动态堆分配器使用内存块。等于或大于半个块的分配将转到虚拟内存系统,而不是动态堆分配器。
  • 用于小分配的 bucket 分配器。如果 bucket 分配器已满,则分配将溢出到动态堆分配器中。

您可以自定义两个动态堆分配器的块大小

Main Allocator, with a custom value for Shared Thread Block Size
主分配器,自定义共享线程块大小

使用情况报告包含了分配器所有三个部分的信息。例如

[ALLOC_DEFAULT] Dual Thread Allocator
  Peak main deferred allocation count 135
    [ALLOC_BUCKET]
      Large Block size 4.0 MB
      Used Block count 1
      Peak Allocated bytes 3.3 MB
    [ALLOC_DEFAULT_MAIN]
      Peak usage frame count: [16.0 MB-32.0 MB]: 8283 frames, [32.0 MB-64.0 MB]: 1 frames
      Requested Block Size 16.0 MB
      Peak Block count 2
      Peak Allocated memory 53.3 MB
      Peak Large allocation bytes 40.2 MB
    [ALLOC_DEFAULT_THREAD]
      Peak usage frame count: [64.0 MB-128.0 MB]: 8284 frames
      Requested Block Size 16.0 MB
      Peak Block count 2
      Peak Allocated memory 78.3 MB
      Peak Large allocation bytes 47.3 MB

注意峰值主要延迟分配计数是删除队列中的项目数。主线程必须删除其已进行的任何分配。如果另一个线程删除分配,则该分配将添加到队列中。分配在队列中等待主线程将其删除。然后它被视为已延迟分配。

Bucket 分配器
线程本地存储 (TLS) 栈分配器