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 bzero
và không memset
khở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 đó bzero
là 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 memset
có 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 memset
cho 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 bzero
vì lý do này. Vậy tại sao bạn vẫn muốn sử dụng bzero
hơ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ì memset
trên bzero
mà 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?
memset
có 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ó.