返回「计算机、信息技术与工程」
Update中new struct对象
本文目录 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
- 采纳状态:未采纳
来源与关系
- 上位集合:我的 UWA 问答
- UWA 标签:内存管理
- 原始问题:Update中new struct对象
- 源页最后更新:2021-09-05 22:32:36