Книга: 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()
вместо прокручивания своей собственной. Велика вероятность, что автор библиотеки знает машину лучше вас
- 12.2.1. Заполнение памяти: memset()
- Двойное сравнение
- 8.1.4. Сравнение массивов
- 3.2.1.2. Начальное выделение памяти: malloc()
- 4.2 Сравнение SAN и NAS
- Сравнение C# и C++
- Неисправности оперативной памяти
- Как работает модуль оперативной памяти
- Описание типов модулей оперативной памяти
- Извлечение и установка модулей памяти
- Характеристики модулей памяти
- ПО для диагностики оперативной памяти