Ö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_A
bütünüyle, daha sonra statement_B
ve sonunda gerçekleştirilmelidir statement_C
. Uygulama, age
5 değerini atadığınızı hatırlayamıyor . Referans veren her ifade bunun age
yerine bu değişkenin değerine erişmelidir.
volatile
Uygulamalar 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-if
kural, dizi statement_A; statement_B; statement_C;
parçasını yürüterek uygulanabileceği statement_C
sonra parçası, statement_A
daha sonra Herşeyden statement_B
, daha sonra kalanını statement_A
ve son olarak geri kalan statement_C
.
Bu as-if kuralları volatile
değişkenler için geçerli değildir . volatile
Değ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.
volatile
değişkenten okuyorsanız ve 5 diyorsa ve gelecek yıl tekrar okursanız, 6 elde edersiniz.