Ich habe gerade Quellen für LZ4-HC-Komprimierung heruntergeladen und überprüft auf 64-Bit-Kompatibilität.Ist der Quellcode für die LZ4-Komprimierung 64-Bit-kompatibel?
Ich bin einige Warnungen "Konvertierung von '__int64' auf 'unsigned int', möglichen Datenverlust" getting
Als ich graben hielt ich Makro ADD_HASH bemerkt (p). Der letzte Teil dieses Makro ist
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)
Was auf 32-Bit geschieht - sicher genug - wir const int von Zeiger und Speichern in einen anderen Zeiger subtrahieren.
Jetzt 64: Es sieht für mich so aus, dass das Subtrahieren von zwei Zeigern auf 64 und das Speichern in U32 überhaupt nicht sicher ist!
Ich verstehe, dass LZ4 64-Bit-kompatibel ist, nur wenn garantiert, dass "p" und "base" nicht weit voneinander entfernt sind ... und jetzt muss ich tiefer in die Logik eindringen, um das zu überprüfen.
Habe ich etwas übersehen? Hat jemand diese Bibliothek auf volle 64-Bit-Kompatibilität überprüft, wie es behauptet? Irgendwelche anderen Probleme mit dem Code der Bibliothek?