2016-12-29 85 views
0
static void Main() 
{ 
    int i; 
    int j; 
    j=10; 
    i=2; 
} 

內存是否按照其聲明的出現順序分配給變量,還是在初始化時分配?何時爲c#中的值類型分配內存?

我認爲變量是按照聲明的順序加載到堆棧上的,而同伴們則是另外聲明。所以,據他們說,j先被推入堆棧,而我認爲我是先被推入堆棧。誰是正確的?

+0

如果這是Main中的唯一代碼,則在Release模式下構建可能會從生成的IL代碼中完全刪除它們 –

+0

[是否聲明變量已佔用內存](http://stackoverflow.com/questions/18140630/ do-declaring-a-variable-already-occupy-memory) – Takarii

+0

如果你在乎堆棧中這兩個變量的順序是什麼,那麼你在程序中做錯了什麼。你應該以這樣的方式編寫你的程序,這並不重要。堆棧本身就是一個實現細節,更不用說何時以及如何向其添加變量。 – Servy

回答

0

簡而言之,您無法知道堆棧分配的確切順序。

爲了優化目的,操作可以由編譯器和處理器重新排序。正如Ehsan在評論中已經指出的那樣,當使用發佈版本時,你的代碼甚至可能根本不會被執行。

看看這篇文章The C# Memory Model,它可能有助於解釋爲什麼分配的確切順序不是事先可以知道的。