Tại sao thời gian biên dịch & thời gian tải địa chỉ liên kết tạo ra địa chỉ vật lý và hợp lý giống nhau trong khi thực thi địa chỉ liên kết tạo ra địa chỉ logic khác nhau &.Địa chỉ liên kết tạo ra cùng một địa chỉ
Trả lời
Đã lâu rồi kể từ khi câu hỏi này được hỏi nhưng tôi chỉ thêm câu trả lời cho mục đích lưu trữ.
Chúng ta hãy có một cái nhìn tại các định nghĩa sau đây:
Logical address
: Địa chỉ tạo ra bởi CPU
Physical address
: Địa chỉ theo cách nhìn của đơn vị quản lý bộ nhớ (MMU)
Bây giờ trong compile time binding
chúng tôi giả định rằng một loạt các vị trí bộ nhớ sẽ luôn luôn có sẵn (đủ cho chương trình) và mã tuyệt đối được tạo ra. Vì vậy, bất cứ địa chỉ nào CPU tạo ra (như địa chỉ con trỏ, vv) đều giống như những gì được nhìn thấy bởi MMU.
Phiên bản sử dụng bộ nhớ tốt hơn là trì hoãn ràng buộc cho đến khi thời gian tải sao cho bộ nhớ không được sử dụng bởi chương trình đang ngồi trên đĩa. Đối với điều này mã được tạo ra trong định dạng relocatable. Đây là load time binding
.
Bây giờ execution time binding
có một chút khác biệt khi liên kết bị trì hoãn cho đến thời gian thực hiện. Trong trường hợp này CPU tạo ra một địa chỉ, chúng ta hãy nói 300
và thực hiện mọi thao tác trên địa chỉ 300
nhưng bất cứ khi nào có quyền truy cập bộ nhớ thực tế, địa chỉ này được chuyển đổi bằng cách thêm giá trị của thanh ghi có thể định vị lại, hãy cho chúng tôi biết R
. Phạm vi địa chỉ hợp lý là 0-LIM
trong khi không gian địa chỉ thực là R-(R+LIM)
.
Hãy để tôi cũng giải thích nó với một ví dụ để nó trở nên rõ ràng hơn:
xem xét trao đổi nếu bạn đổi chương trình với load time binding
bạn cần phải trao đổi nó trở lại cùng một vị trí (như tất cả các địa chỉ trong các hướng dẫn đã bidden theo địa chỉ này) trong khi trong execution time binding
bạn có thể trao đổi lại bất kỳ quá trình nào cho bất kỳ nơi nào bởi vì bạn chỉ cần thay đổi giá trị trong thanh ghi relocatable và nó sẽ chỉ hoạt động tốt. Do đó tăng cường sử dụng bộ nhớ.
- 1. Thêm địa chỉ liên kết địa chỉ
- 2. cách liên kết địa chỉ liên kết địa phương với ổ cắm ipv6
- 3. Liên kết đến một địa chỉ lớn nhận biết DLL
- 4. Cùng một địa chỉ của hai biến?
- 5. C địa chỉ của một địa chỉ của một biến
- 6. Địa chỉ liên kết và máy chủ Mysql
- 7. Xử lý địa chỉ liên hệ trùng lặp do thẻ được liên kết trong API sổ địa chỉ của iOS
- 8. Tìm địa chỉ web của liên kết Javascript
- 9. Phím Gitosis và ssh - địa chỉ email có liên quan đến địa chỉ email git không?
- 10. Địa chỉ WCF Địa ngục?
- 11. Xà phòng WSDL tương đối: địa chỉ địa chỉ
- 12. Hiểu địa chỉ ảo và không gian địa chỉ ảo
- 13. Địa chỉ của mảng
- 14. cách địa phương hoá kết quả địa chỉ từ reverseGeocodeLocation?
- 15. Chuyển đổi [địa chỉ NSNetservice] để ip địa chỉ chuỗi
- 16. Địa chỉ mã hóa địa lý - nhận quận của một địa chỉ nhất định (Google API)
- 17. Tạo Địa chỉ IP Ngẫu nhiên
- 18. Địa chỉ WCFAccessDeniedException
- 19. Lấy địa chỉ địa chỉ của phương thức quá tải
- 20. Tạo liên kết bản đồ google động từ trường địa chỉ
- 21. Địa chỉ gửi thư PHP nhiều địa chỉ
- 22. Facebook kết nối, địa chỉ email?
- 23. địa chỉ email noreply.
- 24. Kết nối IIS Express với một Địa chỉ IP
- 25. Tìm địa chỉ mạng
- 26. địa chỉ của
- 27. Nhiều địa chỉ trong hàm tạo MailAddress
- 28. Tăng địa chỉ IP
- 29. Địa chỉ phát sóng Android
- 30. Làm cách nào để khắc phục lỗi "Chỉ sử dụng một địa chỉ của từng địa chỉ cổng (giao thức/địa chỉ/cổng mạng)"?
Bạn có thể vui lòng cho tôi biết sự khác biệt giữa việc di dời và ràng buộc không? – Zephyr