Tôi vừa tải xuống các nguồn để nén LZ4-HC và kiểm tra tính tương thích 64-bit.Mã nguồn cho LZ4 nén 64-bit có tương thích không?
I'am nhận được vài cảnh báo "chuyển đổi từ '__int64' thành 'int unsigned', mất dữ liệu"
Khi tôi tiếp tục đào sâu tôi nhận thấy ADD_HASH vĩ mô (p). Phần cuối cùng của macro là
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)
gì đang xảy ra trên 32 bit - chúng ta trừ const int từ con trỏ và lưu trữ vào một con trỏ - đủ an toàn.
Bây giờ 64: Dường như với tôi rằng việc trừ hai con trỏ trên 64 và lưu chúng vào U32 là không an toàn chút nào!
Sự hiểu biết của tôi rằng LZ4 chỉ tương thích 64 bit nếu được đảm bảo rằng "p" và "cơ sở" không cách xa nhau ... và bây giờ tôi phải tìm hiểu sâu hơn về logic để kiểm tra điều đó.
Tôi có bỏ lỡ bất kỳ điều gì không? Có ai kiểm tra thư viện này để có khả năng tương thích 64-bit đầy đủ như nó được cho là không? Bất kỳ vấn đề khác biết với mã của thư viện?