0
static void Main()
{
int i;
int j;
j=10;
i=2;
}
內存是否按照其聲明的出現順序分配給變量,還是在初始化時分配?何時爲c#中的值類型分配內存?
我認爲變量是按照聲明的順序加載到堆棧上的,而同伴們則是另外聲明。所以,據他們說,j先被推入堆棧,而我認爲我是先被推入堆棧。誰是正確的?
static void Main()
{
int i;
int j;
j=10;
i=2;
}
內存是否按照其聲明的出現順序分配給變量,還是在初始化時分配?何時爲c#中的值類型分配內存?
我認爲變量是按照聲明的順序加載到堆棧上的,而同伴們則是另外聲明。所以,據他們說,j先被推入堆棧,而我認爲我是先被推入堆棧。誰是正確的?
簡而言之,您無法知道堆棧分配的確切順序。
爲了優化目的,操作可以由編譯器和處理器重新排序。正如Ehsan在評論中已經指出的那樣,當使用發佈版本時,你的代碼甚至可能根本不會被執行。
看看這篇文章The C# Memory Model,它可能有助於解釋爲什麼分配的確切順序不是事先可以知道的。
如果這是Main中的唯一代碼,則在Release模式下構建可能會從生成的IL代碼中完全刪除它們 –
[是否聲明變量已佔用內存](http://stackoverflow.com/questions/18140630/ do-declaring-a-variable-already-occupy-memory) – Takarii
如果你在乎堆棧中這兩個變量的順序是什麼,那麼你在程序中做錯了什麼。你應該以這樣的方式編寫你的程序,這並不重要。堆棧本身就是一個實現細節,更不用說何時以及如何向其添加變量。 – Servy