Trình biên dịch cho lập trình viên
Đo tận mắt điều trình biên dịch làm với mã nguồn C của bạn: từ tiền xử lý, tối ưu, sinh assembly, tới liên kết và nạp — mọi thứ chạy thật trong container.
6/45 phần đã đăng
Trình biên dịch
1
Bốn giai đoạn dịch
Một lệnh gcc chạy qua bốn bước: tiền xử lý, biên dịch, hợp dịch, liên kết. Đo từng bước, và đọc assembly mới thấy trình dịch lặng lẽ đổi printf thành puts. Đo thật trong container.
03/09/2026
· 7 phút đọc
2
Tiền xử lý macro
Macro trông như hàm nhưng chỉ là dán văn bản: SQ(i++) khiến i tăng hai lần, SQ_BAD(1+2) ra 5 chứ không phải 9. Và một #include kéo theo 37 file. Đo thật bằng gcc -E.
03/09/2026
· 7 phút đọc
3
Chống include lặp
Include guard chống được include lặp, nhưng nó khóa theo TÊN macro chứ không theo file — hai header trùng tên guard làm một cái biến mất im lặng. Đo thật bằng gcc -E.
03/09/2026
· 7 phút đọc
4
Đơn vị dịch
Mỗi .c dịch một mình, không thấy các file khác; linker khớp theo tên chứ không theo kiểu. Một lệch kiểu xuyên file lọt lưới cả trình dịch lẫn linker — chỉ -flto bắt được. Đo thật.
03/09/2026
· 7 phút đọc
5
Khai báo và định nghĩa
Khai báo đủ để dịch một file, định nghĩa mới đủ để liên kết — nên thiếu định nghĩa chỉ hỏng lúc link, không phải lúc compile. Và extern kèm khởi tạo lại là định nghĩa. Đo thật.
03/09/2026
· 7 phút đọc
6
Các mức tối ưu -O
Cú nhảy tốc độ lớn nhất là -O0 sang -O1 (4.2x), sau đó thường phẳng. Và một benchmark không dùng kết quả cho -O2 nhanh 490 lần — nhưng đó là công việc bị xóa, không phải tăng tốc. Đo thật.
03/09/2026
· 7 phút đọc
Còn 39 phần nữa sẽ lần lượt được đăng.