Właśnie pobrałem źródła kompresji LZ4-HC i sprawdziłem je pod kątem zgodności 64-bitowej.Czy kod źródłowy kompresji LZ4 jest zgodny z 64-bitowym?
I'am się kilka ostrzeżeń "konwersji z '__int64' do 'unsigned int', ewentualnej utraty danych"
Kiedy trzymałem kopanie zauważyłem makro ADD_HASH (P). Ostatnia część tego makra jest
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)
Co się dzieje na 32 bit - odejmiemy const int ze wskaźnikiem i przechowywania do innego wskaźnika - wystarczająco bezpieczny.
Teraz 64: Wydaje mi się, że odjęcie dwóch wskaźników na 64 i zapisanie ich w U32 nie jest wcale bezpieczne!
Rozumiem, że LZ4 jest kompatybilny ze standardem 64-bitowym tylko wtedy, gdy gwarantuje, że "p" i "baza" nie są daleko od siebie ... a teraz muszę zagłębić się w logikę, aby to sprawdzić.
Czy coś mi umknęło? Czy ktokolwiek sprawdził tę bibliotekę pod kątem pełnej kompatybilności z 64-bitami, jak twierdził? Jakieś inne znane problemy z kodem biblioteki?