2016-12-29 48 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,它可能有助于解释为什么分配的确切顺序不是事先可以知道的。