【发布时间】:2020-12-20 20:33:23
【问题描述】:
我需要什么:
- 具有任意数量顶点(或至少达到
max顶点数量)的多边形 - 应该是struct,这样才能快,可以按值赋值/传递
似乎我不能使用数组或集合来存储顶点,因为那样我的多边形结构将指向堆上的对象,并且当一个多边形按值分配给另一个多边形时,只会执行浅拷贝,并且我会让两个多边形都指向同一个顶点数组。例如:
Polygon a = new Polygon();
Polygon b = a;
// both polygons would be changed
b.vertices[0] = 5;
那么我如何创建一个可以有任意数量(或一些固定数量)顶点但根本不使用堆的结构?
我可以使用很多变量,例如 v1, v2, v3 ... v10 等,但我想或多或少地保持我的代码干净。
【问题讨论】:
-
你真正关心的是
stack vs. heap还是reference type vs. value type?如果是前者,请查看stackalloc。 -
在堆栈内存中完全拥有一个潜在的大多边形并传递它(每次将它作为函数参数传递时复制它等)不一定比使用标准更快(甚至可能更慢)收藏。您是否有需要解决的实际问题,或者您是否正在尝试先发制人地优化甚至可能不存在的问题?
-
我觉得在这种情况下,您的问题更多是关于深度复制列表,而不是关于堆栈与堆。 Stack 和 Heap 是我们 99% 的时间不需要担心的实现细节。
-
恕我直言,如果你解释你想做什么,你可能会得到更好的答案。你的问题是关于如何做到这一点。请edit您的问题。请记住,C# / Roslyn 编译器技术在优化代码和处理数据结构方面做得非常出色。如果您需要智取它,您可能确切地知道它对您做错了什么,您应该告诉我们。过早的优化会使代码完全无法维护。
标签: c# memory struct heap-memory