crc32c

Высокопроизводительная библиотека для вычисления контрольных сумм CRC-32C (Castagnoli). CRC-32C широко используется в системах хранения данных, сетевых протоколах и файловых системах для проверки целостности данных. Библиотека оптимизирована для использования аппаратных ускорений (таких как SSE4.2 и ARM CRC32) и предоставляет эффективные программные реализации для платформ без аппаратной поддержки.

Особенности

  • использование аппаратных инструкций для вычисления CRC-32C на поддерживаемых процессорах (SSE4.2, ARMv8 CRC32);
  • высокопроизводительные программные реализации для платформ без аппаратного ускорения;
  • поддержка инкрементального вычисления CRC для потоковых данных;
  • кроссплатформенность (x86, ARM, PowerPC, RISC-V) и поддержка различных компиляторов;
  • простой API с функциями для вычисления CRC для блоков данных и потоков;
  • интеграция с популярными системами сборки (CMake, Bazel, Autotools).

Основные компоненты

CRC32C предоставляет минималистичный, но мощный API для вычисления контрольных сумм, фокусируясь на производительности и простоте использования (подробнее с документацией можно ознакомиться здесь).

Базовые функции вычисления CRC

Библиотека предоставляет функции для вычисления CRC-32C как для целых блоков данных, так и для инкрементальной обработки потоков данных. Эти функции автоматически выбирают наиболее эффективную реализацию (аппаратную или программную) в зависимости от платформы.

Основные функции:

  • crc32c_value() — вычисление CRC-32C для заданного блока данных;
  • crc32c_extend() — инкрементальное обновление CRC с новыми данными;
  • crc32c_concat() — объединение CRC двух последовательных блоков данных;
  • crc32c_zeros() — вычисление CRC для блока, состоящего из нулей (оптимизация для выравненных данных).

Аппаратные ускорения и оптимизации

CRC32C использует аппаратные инструкции процессора, когда они доступны, что позволяет достичь скорости обработки данных, близкой к пропускной способности памяти. Библиотека автоматически определяет возможности процессора во время выполнения.

Поддерживаемые аппаратные ускорения:

  • Intel SSE4.2: инструкция crc32 для 8-, 16-, 32- и 64-битных данных;
  • ARMv8: инструкции crc32b, crc32h, crc32w, crc32d (AArch64) и crc32cb, crc32ch, crc32cw (AArch32);
  • PowerPC: инструкции crc32 на POWER8 и новее;
  • RISC-V: поддержка расширения Zbr для вычисления CRC.

Инкрементальное и потоковое вычисление

Для обработки больших объемов данных, которые не помещаются в память целиком, библиотека предоставляет функции для инкрементального вычисления CRC. Это позволяет обрабатывать данные по частям, например, при чтении из файла или сетевого потока.

Функции для потоковой обработки:

  • crc32c_init() — инициализация контекста для инкрементального вычисления;
  • crc32c_update() — обновление контекста CRC новыми данными;
  • crc32c_finalize() — получение финального значения CRC после обработки всех данных;
  • поддержка обработки данных произвольного размера и выравнивания.

Интеграция с системами ввода-вывода

CRC32C может быть легко интегрирована в системы чтения и записи данных, предоставляя удобные обёртки для потоков и файловых дескрипторов.

Возможности интеграции:

  • вычисление CRC при чтении/записи файлов через стандартные файловые API;
  • обёртки для потоков C++ (std::istream, std::ostream);
  • интеграция с асинхронными системами ввода-вывода (например, Boost.Asio);
  • поддержка вычисления CRC для memory-mapped файлов.

Инструменты командной строки

В состав библиотеки входят утилиты командной строки для вычисления CRC-32C файлов и данных, что удобно для использования в скриптах и при отладке.

Основные утилиты:

  • crc32c — вычисление и проверка CRC-32C для файлов;
  • crc32c_benchmark — измерение производительности библиотеки на текущей системе;
  • crc32c_test — запуск тестов корректности.

Использование в проекте

Документация по использованию Conan-пакетов для разработки приложений для ОС Аврора.

На сервере Conan библиотеки заранее собраны и размещены под различные версии ОС Аврора 4 и ОC Аврора 5. Для данных версий представлены архитектуры armv7hl, aarch64 и x84_64.

Библиотеку можно использовать в проекте с помощью данного conanfile.py

from conan import ConanFile

class Application(ConanFile):
    settings = "os", "compiler", "arch", "build_type"
    generators = "PkgConfigDeps"

    requires = (
        "crc32c/1.1.2@aurora",
    )    

Процесс локальной сборки описан в документации.

crc32c

Лицензия
CRC32C implementation with support for CPU-specific acceleration instructions
Версия
Автор
Angelica Volkova <angelica.volkova@fruct.org>
Скачать
armv7
13.48 Kb
MD5: b1b106a938dbdda9722da1db0fe6446c
Updated: 30.10.2025, 11:12:45
armv8
15 Kb
MD5: 644017d6fb6200f080ef9f5195309ba8
Updated: 30.10.2025, 11:12:33
x86_64
15.48 Kb
MD5: 6dc2600a139378decbe0931c6560973a
Updated: 30.10.2025, 11:12:47
Использование в проекте

Мы используем cookies для персонализации сайта и его более удобного использования. Вы можете запретить cookies в настройках браузера.

Пожалуйста ознакомьтесь с политикой использования cookies.