Trong malloc của libc (x), hàm được gọi là trả về một con trỏ tới vùng bộ nhớ có ít nhất x byte và con trỏ được căn chỉnh đến 8 byte. Căn chỉnh này có ý nghĩa gì? Cảm ơn bạn.Khi malloc trả về, liên kết 8 byte nghĩa là gì?
Trả lời
Nó có nghĩa là địa chỉ nhọn mod 8 là 0:
pointer % 8 == 0
Điều này có thể quan trọng đối với các hoạt động ở mức độ thấp, nơi nó có thể tác động đúng đắn hoặc hiệu quả. Xem thêm this answer.
Nó có nghĩa là bộ nhớ bắt đầu từ ngày một địa chỉ đó là một bội số của 8.
Đối với lý do tại sao bạn thậm chí sẽ quan tâm: Đối với bộ nhớ đó là không phù hợp, CPU đôi khi yêu cầu hai truy cập để đọc tất cả. Trong một số trường hợp, nó thậm chí sẽ không thử và sẽ chỉ ném một lỗi. Việc đề cập đến "liên kết đến 8 byte" là để người gọi biết liệu nó có phải thực hiện bất kỳ sự lừa đảo nào của con trỏ hay không.
(Thông thường, bạn sẽ không quan tâm - trình biên dịch sẽ chăm sóc của hầu hết các vấn đề liên kết cho bạn Nhưng các thông tin ở đó trong trường hợp bạn cần nó cho một số lý do..)
alignment Memory mô tả các mô đun của các địa chỉ. Vì vậy, 8 byte liên kết có nghĩa là ông địa chỉ là bội số của tám.
Điều này rất quan trọng đối với nhiều hệ thống cũ hơn nơi các địa chỉ cần được căn chỉnh trên một ranh giới 'từ', thường là bội số của bốn byte hoặc hai byte. Nếu nó không được căn chỉnh đúng chương trình bị lỗi với 'lỗi căn chỉnh'.
Các máy gần đây khắc phục sự cố này bằng cách tải từ bất kỳ địa chỉ nào, nhưng thường có nghĩa là phải mất thêm vài chu kỳ để tải dữ liệu.
- 1. Điều gì có nghĩa là "bộ nhớ là 8 byte liên kết"?
- 2. Khi phương thức Perl trả về "hashref" nghĩa là gì?
- 3. Thông báo "Invalid byte 2 của một chuỗi UTF-8 3 byte" có nghĩa là gì?
- 4. Tại sao malloc luôn trả về NULL
- 5. "real * 8" có nghĩa là gì?
- 6. liên kết malloc() trong GCC?
- 7. Chính xác "kết nối liên tục" có nghĩa là gì?
- 8. Thiết kế API C: phải làm gì khi malloc trả về NULL?
- 9. không liên kết đến ranh giới 16-byte có ý nghĩa gì trong x86
- 10. Có nghĩa là gì khi Spring MVC @Controller trả về tên xem rỗng?
- 11. Trả về setTimeout là gì?
- 12. "Trả về false" là gì? làm gì?
- 13. Trả về -1, 1 và 0 có nghĩa là gì trong mã Javascript này?
- 14. Chức năng trả về mảng BYTE
- 15. onPreviewFrame trả về sai byte [] length
- 16. Android: Chủ đề liên kết là gì?
- 17. Định nghĩa về "mã cũ" là gì?
- 18. WCF - liên kết nhanh nhất là gì?
- 19. "\\. \", "\ ?? \", "\\? \", "\\" có nghĩa là gì?
- 20. k-có nghĩa là giá trị trả về trong R
- 21. chr() tương đương trả về đối tượng byte, trong py3k
- 22. malloc() bị treo, nói hỏng danh sách đúp liên kết
- 23. Liên kết đăng xuất với URL trả về (OAuth)
- 24. malloc hiểu sự liên kết như thế nào?
- 25. /([^.]*)\.(.*)/ có nghĩa là gì?
- 26. Các định nghĩa cho >> = và trả về cho đơn nguyên IO là gì?
- 27. 'Kết quả [:: - 1]' có nghĩa là gì?
- 28. Danh sách liên kết bốn là gì?
- 29. Ý nghĩa thực sự của giá trị trả về của `xóa` là gì?
- 30. getResponseHeader trả về null trong IE 8
Bạn sẽ quan tâm đến việc căn chỉnh byte để đảm bảo CPU có thể đọc địa chỉ bộ nhớ một cách hiệu quả. Khối bộ nhớ không liên kết gây ra lỗi bus. Xem phần Truy cập chưa được ký ở đây -> http://en.wikipedia.org/wiki/Segmentation_fault#Bus_error –