---
title: "Update中new struct对象"
author: "石心.Yong"
published_by: "Perrin Yong"
canonical: https://www.pystone.net/notes/uwa-answer-new-struct-in-update/
type: note
content_role: source
source_type: "source"
visibility: public
id_stability: rename-stable
source_path: "10-计算机、信息技术与工程/05-游戏图形与运行时/我的UWA问答/2021-09-02 - Update中new struct对象.md"
content_hash: 28cbd181559be077b4b6d7d714e6c7f3696a3fe6352c63e6af216cfdde0df7ae
knowledge_version: 224c990773de.5fa8af6e39fa
site_commit: 224c990773de166d23a886306577dd90379529ce
notes_commit: 5fa8af6e39fa3891d1b9b4832bfa6c4e0ecaaf0a
---
# 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 问答](https://www.pystone.net/notes/my-uwa-answers/)
- UWA 标签：内存管理
- 原始问题：[Update中new struct对象](https://answer.uwa4d.com/question/6130343f8f8c8342418ff792)
- 源页最后更新：2021-09-05 22:32:36
