Я только что скачал исходники для сжатия LZ4-HC и проверил их на 64-битную совместимость.
Я получаю несколько предупреждений "преобразование из '__int64' в 'unsigned int', возможная потеря данных"
Продолжая копать, я заметил макрос ADD_HASH(p). Последняя часть этого макроса
HashTable[HASH_VALUE(p)] = (p) - base;
p - const BYTE*
base - const BYTE* const for 64-bit. (const int b - for 32-bit)
HTYPE HashTable[];
HTYPE is U32 for 64-bit platform (const BYTE* - for 32-bit)
То, что происходит на 32-битной - мы вычитаем const int из указателя и сохраняем в другой указатель - достаточно безопасно.
Теперь 64: Мне кажется, что вычитание двух указателей из 64 и сохранение их в U32 вообще небезопасно!
Насколько я понимаю, LZ4 совместим с 64-битной версией только в том случае, если гарантируется, что «p» и «base» недалеко друг от друга ... и теперь мне нужно глубже вникнуть в логику, чтобы проверить это.
Я что-то пропустил? Кто-нибудь проверял эту библиотеку на полную 64-битную совместимость, как она утверждала? Любые другие известные проблемы с кодом библиотеки?