返回「计算机、信息技术与工程」

Update中new struct对象

更多
Markdown 结构化数据
本文目录 3 个章节

Update中new struct对象

note · 我的 UWA 问答 本文收录我在 UWA 问答发表的公开回答。问题内容归原提问者;回答保留当时语境,技术结论可能受 Unity 版本、平台和项目条件限制。

问题

struct中包含string字段,如果在Update中new,会不会有gc问题,考虑是否需要用缓存池来解决,目前我测试了一下将struct改成class是肯定有,如果是struct类型,好像没找到

  • 提问者:aladdin
  • 提问时间:2021-09-02 18:17:35

我的回答

对class进行new是会分配堆内存,但是这个堆内存不一定是string字段造成的。class的实例本身就会占用堆内存,而他的字段会不会造成堆内存分配,取决于new的时候会不会对类型进行实例化。实例化时候给string赋值,如果是直接确定的字符串内容的话,编译器会自动进行缓存优化,只会在第一帧创建字符串分配内存。

至于struct,结构体作为值类型本身不会占用堆内存。对struct进行new会不会分配堆内存,取决于new的时候,他的字段会不会实例化,会不会占用堆内存。如果struct没有写构造函数的话,即使里面有引用类型,在new struct的时候也不会实例化,不会分配堆内存。如果写了构造函数,就要看构造函数里面是否分配堆内存了。string的情况与上文提到的一致。

  • 回答时间:2021-09-02 21:21:12
  • 最后更新:2021-09-02 21:21:12
  • 采纳状态:未采纳

来源与关系