Книга: Linux программирование в примерах

12.2.3. Сравнение блоков памяти: memcmp()

12.2.3. Сравнение блоков памяти: memcmp()

Функция memcmp() сравнивает count байтов из двух произвольных буферов данных. Возвращаемое ею значение подобно strcmp(): отрицательное, нулевое или положительное, если первый буфер меньше, равен или больше второго.

Вы можете поинтересоваться: «Почему бы не использовать для такого сравнения strcmp()?» Разница между двумя функциями в том, что memcmp() не принимает во внимание нулевые байты (завершающий строку ''.) Таким образом, memcmp() является функцией, которая используется, когда вам нужно сравнить произвольные двоичные данные.

Другим преимуществом memcmp() является то, что она быстрее типичной реализации на C:

/* memcmp --- пример реализации на С, НЕ для реального использования */
int memcmp(const void *buf1, const void *buf2, size_t count) {
 const unsigned char *cp1 = (const unsigned char*)buf1;
 const unsigned char *cp2 = (const unsigned char*)buf2;
 int diff;
 while (count-- != 0) {
  diff = *cp1++ - *cp2++;
  if (diff != 0)
   return diff;
 }
 return 0;
}

Скорость может быть достигнута в результате использования специальных инструкций «блочного сравнения памяти», которые поддерживают многие архитектуры, или в результате сравнения единиц, превышающих байты. (Эта последняя операция коварна, и лучше оставить ее автору библиотеки.)

По этим причинам всегда следует использовать вашу библиотечную версию memcmp() вместо прокручивания своей собственной. Велика вероятность, что автор библиотеки знает машину лучше вас

Оглавление книги


Генерация: 1.490. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз