Выигрыш в памяти и производительности между использованием числовой константы и численного значения?
Чем отличается расход памяти и процессорного времени при использовании цифры 1 повсюду в коде от расхода при использовании на её местах константы, приведённой ниже?
public const byte ONE = 1;
Ответы (2 шт):
Автор решения: Uranus
→ Ссылка
Ничем. Понятие константа существует лишь на уровне языка. На уровне MSIL загрузка числа и загрузка константы - это одна и та же инструкция.
public class C {
public const byte ONE = 1;
public int M() {
int result = 1;
result += ONE;
return result;
}
}
IL_0000: ldc.i4.1
IL_0001: ldc.i4.1
IL_0002: add
Автор решения: Alexander Petrov
→ Ссылка
Небольшая разница между константой и литералом в данном случае всё же есть.
Литерал 1 будет иметь тип Int32. Константа имеет тип Byte.
Компилятор примет в расчёт типы при вызове перегрузок метода, если таковые имеются.
using var stream = new MemoryStream();
using var writer = new BinaryWriter(stream);
writer.Write(1); // перегрузка, принимающая int
writer.Write(Some.ONE); // перегрузка, принимающая byte
Console.WriteLine(stream.Length); // 5