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.