Özet açıklama
Hem C hem de C ++ soyut bir makine kavramına sahiptir . Kod bazı değişkenlerin değerini kullandığında, soyut makine uygulamanın bu değişkenin değerine erişmesi gerektiğini söyler. Formun kodu statement_A; statement_B; statement_C;tam olarak belirtilen sırada yürütülmelidir. Bu üç ifadede ortak olan ifadeler, her gerçekleştiklerinde yeniden hesaplanmalıdır.
Bildiri dizisi göz önüne alındığında, soyut makinelere göre, statement_A; statement_B; statement_C;uygulama ilk önce statement_Abütünüyle, daha sonra statement_Bve sonunda gerçekleştirilmelidir statement_C. Uygulama, age5 değerini atadığınızı hatırlayamıyor . Referans veren her ifade bunun ageyerine bu değişkenin değerine erişmelidir.
volatileUygulamalar soyut makine spesifikasyonlarına göre kesinlikle C veya C ++ kodu çalıştırıldıysa anahtar kelimeye gerek yoktur . C ve C ++ soyut makinelerinin kayıt kavramı, ortak alt ifadeler kavramı yoktur ve yürütme sırası katıdır.
Her iki dilde de if kuralları vardır. Bir uygulama, soyut makine şartnamesine göre bir şeyler yürütmüş gibi davrandığı sürece standartla uyumludur . Derleyici, değişken olmayan değişkenlerin atamalar arasındaki değerleri değiştirmediğini varsayabilir. Yani sürece kesilmez olarak as-ifkural, dizi statement_A; statement_B; statement_C;parçasını yürüterek uygulanabileceği statement_Csonra parçası, statement_Adaha sonra Herşeyden statement_B, daha sonra kalanını statement_Ave son olarak geri kalan statement_C.
Bu as-if kuralları volatiledeğişkenler için geçerli değildir . volatileDeğişkenler ve işlevlerle ilgili olarak , bir uygulama tam olarak yapmasını söylediklerinizi ve tam olarak bir şeyler yapmasını söylediğiniz sırayla yapmalıdır.
Soyut makine spesifikasyonunun bir dezavantajı var: Yavaş. C ve C ++ 'ın diğer dillere göre olumlu bir yönü de oldukça hızlı olmalarıdır. Bu soyut makineler için kod yürütülmüşse durum böyle olmaz. Olarak -eğer kurallar C ve C ++ kadar hızlı olmasını sağlayacak şeylerdir.
ELI5 cevabı
derleyici bellek adresini "optimize etmez" ne anlama gelir?
Bir bellek adresini "optimize etmek" beş yıllık bir yeteneğin alanı içinde olmayan gelişmiş bir kavramdır. Uyumlu beş yaşındakiler tam olarak ne yapmaları gerektiğini söyleyin, daha fazla, daha az değil. İle volatile, uygulamaya beş gibi davranmasını söylüyorsunuz: Düşünme yok, süslü optimizasyon yok. Bunun yerine, uygulama kodun yapmasını istediği şeyi tam olarak yapmak zorundadır.
volatiledeğişkenten okuyorsanız ve 5 diyorsa ve gelecek yıl tekrar okursanız, 6 elde edersiniz.