Base64 : Une Méthode Insoupçonnée de Compression dans la Compilation

Base64 for compression

Base64 : Une Méthode Insoupçonnée de Compression dans la Compilation

Les compilateurs C et C++ comme GCC transforment d'abord votre code en assembleur, une représentation bas niveau utilisant des instructions spécifiques à l'architecture du processeur. Ce code assembleur, généralement en ASCII pur, est ensuite converti en code machine binaire par un assembleur.

Lors de la compilation, des caractères Unicode comme 'é' peuvent être encodés en UTF-8, prenant plus d'espace en sortie assembleur. Par exemple, 'é' (2 octets en UTF-8) devient "\303\251" (8 caractères ASCII). Cette expansion pose problème pour l'incorporation de fichiers comme des images via la directive '#embed'.

Base64, une méthode encodant des données binaires en ASCII, pourrait paradoxalement servir à compresser. Bien qu'il augmente généralement la taille (3 octets → 4 caractères), il s'avère utile dans certains cas de compilation. GCC 15 introduit même un pseudo-op "base64" pour encoder efficacement les données.

Cette innovation, présentée par Daniel Lemire le 3 juillet 2025 sur son blog, montre comment Base64 peut optimiser la compilation. Lemire, professeur d'informatique à l'Université du Québec (TÉLUQ), souligne l'importance de cette approche pour les développeurs.

Base64: Giải Pháp Nén Dữ Liệu Bất Ngờ Trong Biên Dịch

Trình biên dịch C/C++ như GCC chuyển mã nguồn thành assembly - dạng văn bản ASCII mô tả chương trình ở mức thấp. Assembler sau đó dịch mã này thành mã máy nhị phân để xử lý thực thi trực tiếp.

Khi biên dịch, ký tự Unicode như 'é' trong chuỗi (ví dụ: unsigned char a[] = "é") được mã hóa UTF-8 thành 2 byte (\303\251). Trong assembly, chúng chiếm tới 8 ký tự ASCII, gây phình dữ liệu. Vấn đề tương tự xảy ra với chỉ thị '#embed' để nhúng file vào mã nguồn.

Base64, phương pháp mã hóa nhị phân sang 64 ký tự ASCII in được, thường làm tăng dữ liệu (3 byte → 4 ký tự). Tuy nhiên, trong biên dịch, nó lại có thể giảm kích thước. Phiên bản GCC 15 mới đã bổ sung lệnh giả "base64" để tối ưu hóa quá trình này.

Theo bài viết ngày 3/7/2025 trên blog của Daniel Lemire - giáo sư khoa học máy tính tại Đại học Québec (TÉLUQ), kỹ thuật này mở ra hướng tiếp cận mới cho lập trình viên trong việc tối ưu hóa dữ liệu khi biên dịch.