Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么时候为c#中的值类型分配内存?_C#_Memory Management - Fatal编程技术网

什么时候为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;
}