У меня есть следующая программа для добавления значений. Когда я комментирую, добавьте метод вызова в основной метод и посмотрите в ILDASM.EXE. Размер Maxstack равен 2. И после раскомментирования размер maxstack равен 4.Расчет значения maxstack в коде IL
Почему в случае метода Main все переменные не входят в стек как стек размер остается только 2, в то время как в случае вызова метода Add каждая переменная переходит в стек? Это тот случай, когда внутри основного метода вычисляется один за другим, так что он принимает только две переменные за раз.
Пожалуйста, очистите мое замешательство.
static void Main(string[] args)
{
int x = 2;
int y = 3;
int a = 4;
int b = 5;
int c = 6;
Console.WriteLine(x + y + a + b + c);
Console.WriteLine(Add(10, 20, 30, 40));
Console.ReadLine();
}
static int Add(int x, int y, int z, int a)
{
return x + y + z + a;
}
Я бы немного подправить фразировки в верхней части - это не * декларация *, которая использует пространство стека, это * инициализация *. –
@Damien_The_Unbeliever Благодарим за отзыв и исправление. Фиксация. –
Так же, как ИЛ не создается по строкам. Я хочу сказать, что если x = 2 принимает один стек, то почему бы не объявление другой ценности? Похоже, что компилятор пришел к пониманию того, что для этого требуется просто добавление, поэтому 2 места в стеке будут enogh. – TBAG