提问人:t.ry 提问时间:7/5/2023 最后编辑:t.ry 更新时间:7/5/2023 访问量:59
Go 内存和分配管理
Go memory and allocation management
问:
我正在从从
Entity
bufio.Scanner
type Entity struct { <primitives_fields> <enum_fields> }
进入他们的指针的一部分
var entities []*Entity for scanner.Scan() { entity := &Entity{ <serialize_strings> } entities = append(entities, entity) }
我需要将此切片传递到特定的数据结构中
entities
type Datastructure struct { items []*Item <auxiliary_fields> }
生成和存储对象数量:
len(entities)
Item
type Item struct { entity *Entity <auxiliary_fields> }
用指针指向它们各自的:
Entity
func (ds *Datastructure) Generate(entities []*Entity) { ds.items = make([]*Item, len(entities)) for idx, entity := range entities { ds.items[idx] = &Item{ entity, ... } } }
以与另一个容器数据集进行匹配。
Other
实体
在步骤 1 中切片。既不使用,也不在代码中进一步显式引用,将其传递给数据结构。
数据结构返回:
Matches
type Match struct { entity *Entity other *Other }
通过一个
渠道
,其中大约 30% 的将与其中一个 .items
Other
- 步骤 2 中的数据结构。既不使用,也不在匹配完成后在代码中进一步显式引用。
这些容器累积到其指针的切片中:
Match
var matches []*Match
并用于进一步的繁重计算。
这是一项内存中服务,我想了解在整个管道中保留对已分析类型及其指针的引用的位置和原因。Entity
理想情况下,我只想将那些在切片内容器中引用的对象保存在内存中(即只有最初解析的对象的 30%),并取消分配/释放未使用/未匹配的 70% 对象占用的内存。Entity
Match
matches
Entity
例如,如果我在完成它们时同时对 和 切片进行切片,从而删除对未使用的 70% 的任何进一步引用,它们实际上会被垃圾收集,并且它们的内存会被取消分配/释放吗?nil
entities
items
entities
答: 暂无答案
评论
bufio.Scanner