Простой вопрос, но я не нашел окончательного ответа на Stack Overflow.
struct foo { int x; int y; int z; }
foo Func()
{
return new foo();
}
void Func2()
{
foo f = Func(); // did boxing and unboxing occur?
}
Всегда ли структура C # (тип значения) копируется в стек при возврате из функции, независимо от ее размера? Причина, по которой я не уверен, заключается в том, что для некоторых наборов инструкций, отличных от MSIL (например, x86), возвращаемое значение обычно должно соответствовать регистру процессора, а стек напрямую не задействован.
Если да, то это сайт вызова, который предварительно выделяет место в стеке CLR для (ожидаемого) типа возвращаемого значения?
Я нашел окончательный ответ на Stack Overflow. struct foo { int x; int y; int z; }
foo Func()
{
return new foo();
}
void Func2()
{
foo f = Func(); // did boxing and unboxing occur?
}
Всегда ли структура C # (тип значения) копируется в стек при возврате из функции, независимо от ее размера? Причина, по которой я не уверен, заключается в том, что для некоторых наборов инструкций, отличных от MSIL (например, x86), возвращаемое значение обычно должно соответствовать регистру процессора, а стек напрямую не задействован.
Если да, то это сайт вызова, который предварительно выделяет место в стеке CLR для (ожидаемого) типа возвращаемого значения?
Я нашел окончательный ответ на Stack Overflow. struct foo { int x; int y; int z; }
foo Func()
{
return new foo();
}
void Func2()
{
foo f = Func(); // did boxing and unboxing occur?
}
Всегда ли структура C # (тип значения) копируется в стек при возврате из функции, независимо от ее размера? Причина, по которой я не уверен, заключается в том, что для некоторых наборов инструкций, отличных от MSIL (например, x86), возвращаемое значение обычно должно соответствовать регистру процессора, а стек напрямую не задействован.
Если да, то это сайт вызова, который предварительно выделяет место в стеке CLR для (ожидаемого) типа возвращаемого значения?
[править: сводка ответов:] Для целей исходного вопроса ответ отрицательный; CLR никогда не будет (молча) упаковать структуру только с целью ее отправки в качестве возвращаемого значения.