Trong lớp Lập trình hệ thống tôi đã học kỳ trước, chúng tôi phải triển khai một máy khách / máy chủ cơ bản trong C. Khi khởi tạo các cấu trúc, như sock_addr_in, hoặc bộ đệm char (mà chúng tôi thường gửi dữ liệu qua lại giữa máy khách và máy chủ), giáo sư hướng dẫn chúng tôi chỉ sử dụng bzerovà không memsetkhởi tạo chúng. Anh ấy không bao giờ giải thích tại sao, và tôi tò mò liệu có lý do hợp lệ cho việc này không?
Tôi thấy ở đây: http://fdiv.net/2009/01/14/memset-vs-bzero-ultimate-showdown đó bzerolà hiệu quả hơn do thực tế rằng chỉ bao giờ sẽ được zeroing bộ nhớ, vì vậy nó không phải làm bất kỳ kiểm tra bổ sung memsetcó thể làm. Điều đó vẫn không nhất thiết có vẻ như là một lý do để hoàn toàn không sử dụng memsetcho bộ nhớ zeroing.
bzerođược coi là không dùng nữa, và hơn nữa không phải là hàm C tiêu chuẩn. Theo hướng dẫn, memsetđược ưa thích hơn bzerovì lý do này. Vậy tại sao bạn vẫn muốn sử dụng bzerohơn memset? Chỉ để đạt được hiệu quả, hoặc nó là một cái gì đó nhiều hơn? Tương tự như vậy, những lợi ích của những gì memsettrên bzeromà làm cho nó trên thực tế lựa chọn ưa thích cho các chương trình mới hơn?
memsetcó thể kém hiệu quả hơn một chút vì "kiểm tra thêm một chút" chắc chắn là một trường hợp tối ưu hóa sớm: bất kỳ lợi ích nào bạn có thể thấy từ việc bỏ qua một lệnh CPU hoặc hai đều không đáng khi bạn có thể gây nguy hiểm cho tính di động của bạn mã. bzerođã lỗi thời và đó là lý do đủ để không sử dụng nó.