2012-03-12 60 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的零值開始,您需要先清理它,然後才能使用它。

但是,如果沒有看到代碼,我們不能告知您這是一個好還是壞的舉措,但對您而言卻有所不同。

相關問題