什么时候为c#中的值类型分配内存?
在堆栈中为变量分配的内存是按照其声明出现的顺序,还是在初始化时分配什么时候为c#中的值类型分配内存?,c#,memory-management,C#,Memory Management,在堆栈中为变量分配的内存是按照其声明出现的顺序,还是在初始化时分配 我认为变量是按照声明的顺序加载到堆栈上的,而同龄人则相反。所以,根据他们的说法,j首先被推到堆栈上,而我认为我首先被推到堆栈上。谁是对的?简而言之,您无法知道堆栈分配的确切顺序 为了优化,编译器和处理器都可以对操作重新排序。正如Ehsan在一篇评论中指出的,当使用发布版本时,您的代码甚至可能根本不会被执行 看看这篇文章,它可能有助于解释为什么分配的确切顺序不是你事先能知道的。如果这是Main中唯一的代码,在发布模式下构建可能会将
我认为变量是按照声明的顺序加载到堆栈上的,而同龄人则相反。所以,根据他们的说法,j首先被推到堆栈上,而我认为我首先被推到堆栈上。谁是对的?简而言之,您无法知道堆栈分配的确切顺序 为了优化,编译器和处理器都可以对操作重新排序。正如Ehsan在一篇评论中指出的,当使用发布版本时,您的代码甚至可能根本不会被执行
看看这篇文章,它可能有助于解释为什么分配的确切顺序不是你事先能知道的。如果这是Main中唯一的代码,在发布模式下构建可能会将它们从生成的IL代码中完全删除。如果你关心这两个变量在堆栈上的顺序,可能会重复,你的程序有问题。你应该以一种无所谓的方式编写你的程序。堆栈的概念本身就是一个实现细节,更不用说何时以及如何向其添加变量了。
static void Main()
{
int i;
int j;
j=10;
i=2;
}