Несколько вещей, чтобы сказать. Функция memmove, вероятно, будет скопирована быстрее, чем вы, часто ее авторы оптимизируют для использования специальных инструкций, которые доступны на языке C без встроенного ассемблера. Я считаю, что эти инструкции называются инструкциями SIMD (Single Instruction Multiple Data)? Кто-то меня исправит, если я ошибаюсь.
Если вы можете сохранить элементы, которые нужно удалить, то вы можете оптимизировать, отсортировав список предметов, которые вы хотите удалить, а затем, выполнив один проход. Это не сложно, а просто требует какой-то смешной арифметики.
Также вы можете просто сохранить каждый элемент в связанном списке, удаление элемента тривиально, но вы теряете случайный доступ к вашему массиву.
Наконец, вы можете иметь дополнительный массив указателей, одинаковый размер вашего массива, каждый указатель указывает на элемент. Затем вы можете получить доступ к массиву с помощью двойной косвенности, вы можете отсортировать массив с помощью указателей подкачки, и вы можете удалить элементы, указав свой указатель NULL.
Надеюсь, это даст вам некоторые идеи. Обычно есть способ оптимизировать вещи, но тогда он становится более специфичным для приложения.
check '$ man memmove' – auselen
Я, хотя это использует почти такую же технику. И бенчмаркинг, который я сделал, похоже, поддерживает эту теорию. – Meda
memmove всегда будет оптимизирован в соответствии с базовой архитектурой. в худшем случае будет походить на вас. в лучшем случае он будет качать. – auselen