2 回答
TA贡献1893条经验 获得超10个赞
append()如果目标切片的容量小于追加后切片的长度,则内置函数需要创建一个新的后备数组。这也需要将当前元素从目的地复制到新分配的数组中,因此开销很大。
您附加到的切片很可能是空切片,因为您使用切片文字来创建您的Opengl.OpenGLVertexInfo值。即使append()考虑未来并分配比附加指定元素所需的更大的数组,在您的情况下,可能需要多次重新分配才能完成 4 次迭代。
如果您vertexInfo像这样创建和初始化,您可以避免重新分配:
vertexInfo := Opengl.OpenGLVertexInfo{
Translations: []float32{float32(s.x), float32(s.y), 0, float32(s.x), float32(s.y), 0, float32(s.x), float32(s.y), 0, float32(s.x), float32(s.y), 0},
Rotations: []float64{0, 0, 1, s.rot, 0, 0, 1, s.rot, 0, 0, 1, s.rot, 0, 0, 1, s.rot},
Scales: []float64{s.xS, s.yS, 0, s.xS, s.yS, 0, s.xS, s.yS, 0, s.xS, s.yS, 0},
Colors: []float64{s.r, s.g, s.b, s.a, s.r, s.g, s.b, s.a, s.r, s.g, s.b, s.a, s.r, s.g, s.b, s.a},
}
另请注意,此结构文字将负责不必重新分配切片后面的数组。但是如果在代码的其他地方(我们没有看到),您将更多元素附加到这些切片中,它们可能会导致重新分配。如果是这种情况,您应该创建覆盖“未来”分配(例如make([]float64, 16, 32))的更大容量的切片。
TA贡献1799条经验 获得超9个赞
空切片是空的。要追加,它必须分配内存。然后你做更多的追加,这必须分配更多的内存。
要加快速度,请使用固定大小的数组或用于make
创建具有正确长度的切片,或在声明切片时使用项目初始化切片。
- 2 回答
- 0 关注
- 154 浏览
添加回答
举报