Оптимизиация копирования ячеек массива в случае если де факто копируется в саму себя

На примере тривиального алгоритма удаления определённого числа из массива:

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 и ассемблера по крайней мере, в стековых машинах непонятно, но по идее должно быть так же)


Ответы (0 шт):