Giải thích trừu tượng
Cả C và C ++ đều có khái niệm về một cỗ máy trừu tượng . Khi mã sử dụng giá trị của một số biến, máy trừu tượng cho biết việc thực hiện phải truy cập giá trị của biến đó. Mã của biểu mẫu statement_A; statement_B; statement_C;
phải được thực hiện theo đúng thứ tự được chỉ định. Các biểu thức chung cho ba câu lệnh đó phải được tính lại mỗi lần chúng xuất hiện.
Theo các máy trừu tượng, được đưa ra chuỗi các câu lệnh statement_A; statement_B; statement_C;
, việc thực hiện trước tiên phải thực hiện statement_A
toàn bộ, sau đó statement_B
và cuối cùng statement_C
. Việc thực hiện không thể nhớ rằng bạn đã gán age
giá trị là 5. Mỗi câu lệnh tham chiếu age
phải thay vào đó truy cập giá trị của biến đó.
Sẽ không cần volatile
từ khóa nếu việc triển khai thực hiện nghiêm ngặt mã C hoặc C ++ theo các thông số kỹ thuật của máy trừu tượng. Các máy trừu tượng C và C ++ không có khái niệm về các thanh ghi, không có khái niệm về các biểu hiện con chung và thứ tự thực hiện là nghiêm ngặt.
Cả hai ngôn ngữ cũng có quy tắc as-if . Việc triển khai tuân thủ tiêu chuẩn miễn là việc triển khai đó hoạt động như thể nó đã thực hiện mọi thứ theo đặc tả máy trừu tượng. Trình biên dịch có thể giả sử các biến không biến động không thay đổi giá trị giữa các bài tập. Chừng nào nó không phá vỡ as-if
quy tắc, trình tự statement_A; statement_B; statement_C;
có thể được thực hiện bằng cách thực thi một phần statement_C
, sau đó là một phần statement_A
, sau statement_B
đó là phần còn lại statement_A
và cuối cùng là phần còn lại statement_C
.
Những quy tắc như nếu không áp dụng cho volatile
các biến. Liên quan đến volatile
các biến và chức năng, việc triển khai phải thực hiện chính xác những gì bạn đã bảo nó thực hiện và chính xác theo thứ tự bạn đã bảo nó thực hiện.
Có một nhược điểm của đặc tả máy trừu tượng: Nó chậm. Một khía cạnh tích cực của C và C ++ so với các ngôn ngữ khác là chúng khá nhanh. Điều này sẽ không xảy ra nếu mã được thực thi trên các máy trừu tượng này. Các as-nếu quy định là những gì cho phép C và C ++ để được như vậy nhanh.
Câu trả lời ELI5
Điều đó có nghĩa là gì khi trình biên dịch không "tối ưu hóa" địa chỉ bộ nhớ?
"Tối ưu hóa đi" một địa chỉ bộ nhớ là một khái niệm tiên tiến, một cái gì đó không nằm trong khả năng của một đứa trẻ năm tuổi. Trẻ năm tuổi tuân thủ sẽ làm chính xác những gì bạn bảo chúng làm, không hơn, không kém. Với volatile
, bạn đang nói với việc thực hiện hành động như năm: Không suy nghĩ, không tối ưu hóa ưa thích. Thay vào đó, việc thực hiện phải thực hiện chính xác những gì mã bảo nó làm.
volatile
biến số và nó báo là 5 và bạn sẽ đọc lại vào năm tới, bạn sẽ được đảm bảo nhận được 6.