Tôi sẽ ăn cắp câu đầu tiên từ câu trả lời của Péter Török nhưng giải thích khác đi: Không nhất thiết. Nó cũng có thể quyết định chỉ sử dụng giá trị thô 5 thay vì myval
trong mã được biên dịch.
Đối xử myval
như một biến thông thường bằng cách phân bổ không gian cho nó trong bộ nhớ có thể có ý nghĩa về hiệu năng từ phạm vi rất nhỏ đến nghiêm trọng tùy thuộc vào kiến trúc và cách nó xử lý bộ nhớ.
Làm việc theo cách đó, một trình biên dịch sẽ phát ra một lệnh chỉ ra một cái gì đó dọc theo dòng "tải thanh ghi R với bất cứ thứ gì ở vị trí bộ nhớ cho myval
". Vị trí củamyval
như một toán hạng của lệnh, vì vậy nó đi ra khỏi cùng một khối dữ liệu như chính lệnh đó. Trên các CPU hiện đại, giá trị này sẽ có sẵn trên chip do tìm nạp trước lệnh. Với địa chỉ trong tay, CPU vẫn phải lấy giá trị ra khỏi bộ nhớ. Điều đó có thể diễn ra nhanh chóng nếu vị trí ở gần trong bộ đệm hoặc không quá nhanh nếu không. CPU không chỉ phải ra khỏi chip để có được giá trị, làm như vậy có thể buộc nó phải vượt qua các dữ liệu hữu ích khác từ bộ đệm sẽ được đưa trở lại sau. Khi chương trình đang chạy trong HĐH ảo hóa bộ nhớ, việc truy cập vào vị trí đó có thể gây ra lỗi trang, dẫn đến chương trình được đưa vào chế độ ngủ cho đến khi trang yêu cầu được đưa vào RAM thông qua ngoại vi (ví dụ: đĩa) I / O,
Bằng cách nối cứng giá trị không đổi vào mã đối tượng, trình biên dịch sẽ phát ra một lệnh như "tải thanh ghi R với giá trị 5
". Giống như địa chỉ bộ nhớ được mô tả ở trên, 5
sẽ là một toán hạng cho hướng dẫn và có sẵn theo cùng một cách (nghĩa là được tìm nạp trước). Đó là nơi tương tự kết thúc, bởi vì CPU hiện có mọi thứ cần thiết để 5
đăng ký R và bắt tay vào công việc. Vì các địa chỉ và các thanh ghi thường có cùng kích thước, không có sự khác biệt về số byte mà lệnh chiếm giữ và việc thực thi thực tế diễn ra với khả năng không có lỗi bộ nhớ cache và lỗi trang có thể xảy ra khi bạn bỏ đi thứ gì đó trong bộ nhớ.
Trình biên dịch có thể, như Péter đã chỉ ra, phân bổ không gian và một biểu tượng cho myval
các bản dựng gỡ lỗi. Sẽ không có bất kỳ tác hại nào khi làm điều này và vẫn cứng cáp giá trị của nó, vì giá trị vẫn giữ nguyên cho dù điều gì và biểu tượng thực sự chỉ có ở đó để con người chúng ta sử dụng để gỡ lỗi.
Lưu ý rằng điều này chỉ áp dụng cho các giá trị có thể được giữ trong các thanh ghi, bởi vì các thanh ghi là số nguyên theo bản chất. Các hằng số khác sẽ kết thúc trong bộ nhớ.
storage of const object
như nguồn câu hỏi của bạn có ít giá trị.