Bài viết mới nhất

Tổng 1873 bài
Giải thuật 03/09/2026 8 phút

Bỏ con trỏ, dùng chỉ số: cây nhỏ hơn 33% và nhanh hơn 1,86 lần

Cây và list phải dùng con trỏ, đó là cách chuẩn? Tôi đo thử: thay con trỏ 8 byte bằng chỉ số 4 byte vào một arena làm node nhỏ hơn 33%, RAM ít hơn 33%, và tra cứu nhanh 1,86 lần — vì node nằm liền mạch thay vì malloc rải rác. Con trỏ không phải lựa chọn duy nhất, và thường không phải lựa chọn tốt nhất.

Giải thuật 03/09/2026 6 phút

Benchmark của bạn đang nói dối: bốn cách bạn tự lừa mình khi đo tốc độ

Viết một vòng lặp, bọc đồng hồ hai đầu, chia cho số phần tử — nghe là xong. Nhưng cùng một đoạn code, tôi đo được 0 nano-giây (nhanh vô hạn), rồi 0,57, rồi 2,62 ns, tùy vào những cái bẫy mà trình biên dịch giăng sau lưng. Chỉ một cách đo là ra con số thật.

Giải thuật 03/09/2026 9 phút

Bật hết -O3 -Ofast -march=native cho chắc? Đo ra chỉ một cờ nhanh thật — và nó đổi kết quả

Tưởng cứ -O3 -Ofast -march=native -funroll là nhanh nhất? Tôi đo một workload thật: -O3 bằng -O2, -march không đổi, -funroll chỉ 3%, chỉ -ffast-math nhanh 2,9 lần nhưng đổi kết quả số thực. Không có combo cờ thần — mỗi cờ là một đánh đổi phụ thuộc workload, và cách duy nhất chọn đúng là đo ở đúng máy, đúng cờ, đúng code của bạn.

Giải thuật 03/09/2026 8 phút

Cùng một hàm constexpr: một chỗ chạy 0,227 ns, chỗ kia 45625 ns — khác nhau ở đâu?

Đánh dấu constexpr là chắc chắn tính sẵn lúc biên dịch, 0 chi phí? Tôi đo và phát hiện chữ đó hứa ít hơn tưởng. Đặt kết quả vào biến constexpr thì nó thành literal đọc 0,227 ns; gọi đúng hàm ấy với đầu vào động thì nó chạy nguyên vòng lặp lúc chạy, 45625 ns. Ngữ cảnh mới quyết định, không phải từ khóa.

Giải thuật 03/09/2026 8 phút

fork chỉ tốn 74µs dù cha giữ gì — nhưng cấp 256MB trước rồi fork lại chậm 1,86 lần

Tưởng fork đắt vì phải sao chép cả bộ nhớ? Tôi đo: Copy-on-Write nên fork KHÔNG chép dữ liệu — chỉ 74µs, 1,6 lần một luồng. Nhưng CoW không làm fork miễn phí theo kích thước: fork sau khi cấp 256MB chậm 1,86 lần vì vẫn phải nhân đôi bảng trang. CoW cắt chép dữ liệu, không cắt chép bảng trang.

Hệ điều hành 03/09/2026 8 phút

Phép đo real-time cho tôi 50:50 sạch đẹp — và nó sai hoàn toàn vì một mã trả về tôi suýt bỏ qua

Đo SCHED_FIFO so tiến trình thường ra 50:50 sạch sẽ — nhưng mã trả về rtok=0 tố cáo lệnh đặt lịch RT đã thất bại, tôi đang đo hai tiến trình thường. Cấp quyền RT: FIFO đè còn 95:5 — và cái 5% không phải real-time lịch sự mà là van an toàn của nhân chặn ở 95% để bạn không treo máy.