2012-03-12 59 views
0

我有一个20×10的数组,由双打和短串(每个少于15个字符)组成。该数组仅在调用函数时才使用。字符串是常数只有双打变化。我应该在本地创建一个大型数组吗?

我应该离开这个数组本地的功能?任何我不知道的考虑?

我正在规划这个函数和数组的过程。该数组可能有其他类型,最有可能是一些枚举类型,所以我没有任何具体的代码显示。我所知道的只是数组的大小和尺寸。

+2

你能发表一些代码吗?应该帮助我们给你一个方向。 – NickHeidke 2012-03-12 16:30:25

+1

你有这个设置的问题吗? – Oded 2012-03-12 16:30:29

+0

你有一个多种类型的数组? – 2012-03-12 16:31:11

回答

4

你简单地不能有一个数组的本地实例。

数组是引用类型,所以实际内存总是分配在堆上。

所以:是的,如果符合它的用法,请保持您的(引用到一个)数组本地变量。它的作用:

使用该数组里面只有一个功能

+0

如果你确实需要一个本地数组,这就是'stackalloc'的作用。不过,我还没有看到需要它的地方。整个BCL只用于几十个班级。 – Gabe 2012-03-12 16:40:32

+0

@加贝 - 对,但确实很奇特,我决定忽略它。 – 2012-03-12 16:43:46

+1

这是一种分裂的头发;这不是C++,你一般不会“指向”预先存在的堆位置,而无需复制创建它时获得的引用。因此,如果您在方法退出时超出范围的方法中声明了一个变量,则从开发人员的角度来看,无论分配内存的位置如何,它都是“本地”的。即使是本地值类型也可以放在堆中;将它们放在堆栈上的决定是CLR实现细节,并非总是如此。 – KeithS 2012-03-12 16:48:00

2

我不会担心太多事情,除非您非常担心内存使用情况(目前这些问题并不多)。

3

一般来说,从可读性/可理解性的角度来看我将使阵列地方,让别人谁可以进来看看这个以后的代码可以理解数组的用法和范围。如果你的后代可以通过检查发现数组只能被其内部声明的一个函数使用,那么如果他们需要进行更改,他们知道变更的范围以及他们必须执行的测试的范围是同样限于使用该函数的代码路径。

不利的一面是,如果这个数组需要很多次,而且它的值不会改变,那么从性能的角度来看,扩大它的范围是有意义的,从而延长它的生命周期,所以你不会创建和GC这个数组不必要的。如果类将多次实例化,但始终使用相同的一组值(或大部分值),则可以将其设为静态。如果你这样做,我会记录它只是在一个函数中使用(不幸的是,在它们中声明成为错误之后,文档可能会保持不变,但至少你会尽全力通知未来的编码器)

这真的取决于你;我们无法从您的问题中了解您可能会使用此代码发现哪些问题可能会改变或不改变。

2

当前局部变量在每次调用时都被实例化。

如果您将数组变量和它的声明放在该函数之外,那么它将不会以double的零值开始,您需要先清理它,然后才能使用它。

但是,如果没有看到代码,我们不能告知您这是一个好还是坏的举措,但对您而言却有所不同。

相关问题