Оптимизиация копирования ячеек массива в случае если де факто копируется в саму себя
На примере тривиального алгоритма удаления определённого числа из массива:
public int RemoveElement(int[] nums, int target)
{
int i = 0;
for (int j = 0; j < nums.Length; j++)
{
if (nums[j] != target)
{
nums[i] = nums[j];
i++;
}
}
return i;
}
var nums = new[] {1,2,3,4,5};
var target = 3;
var newsize = RemoveElement(nums, target);
for (int i = 0; i < newsize; i++)
{
Console.WriteLine(nums[i]);
}
Меня интересует поведение в случае если массив не содержит искомое число: в этом случае i = j и по факту происходит копирование ячейки массива в саму себя. (Аналогично в примере это происходит до момента нахождения тройки)
Есть ли какие-либо оптимизации на уровне ниже C# - т.е. будет ли процессор переписывать ячейку саму в себя или есть какие-либо оптимизиации?
Иначе, если подобных оптимизаций нет, то есть ли смысл делать предварительную проверку на равенство i и j чтобы не выполнять лишний раз перезапись ячеек массива? (Неявно здесь ещё один вопрос: какая операция более дорогая - сравнение i и j или операция записи ячеек? Подозреваю, что вторая, на уровне C и ассемблера по крайней мере, в стековых машинах непонятно, но по идее должно быть так же)