SORU
10 EKİM 2014, Cuma


C uçucu anahtar kelime hafıza çit tanıtmak mı?

volatile değeri değiştirilebilir derleyici bildirir anlıyorum, ama bu işlevi yerine getirmek için, derleyici o iş yapmak için bir bellek çit tanıtmama gerek var mı?

Benim anladığıma göre, uçucu nesneler üzerinde işlem sırası yeniden sıralanmaz ve korunması gerekir. Bu çitler gerekli olan ve gerçekten bu etrafında bir yolu yoktur, bazı hafıza ima ediyor. Bu demek doğru olur mu?


this related question ilginç bir tartışma var

Jonathan Wakely writes:

... Farklı uçucu değişkenlere erişir olamaz tarafından sipariş derleyici ayrı tam ifadelerde ... hemen ortaya sürece geçici iş parçacığı güvenliği için işe yaramaz, ama sebep o değil verir. Derleyici kere yeniden düzenlemek olabilir, çünkü değil CPU onları yeniden düzenlemek olabilir, çünkü uçucu nesneler, ama. Atom işlemleri ve bellek engelleri derleyici ve İŞLEMCİ önlemek yeniden düzenleme

Hangi 16 ** in the comments cevaplar:

... Fark yok, C standart bakış açısıyla derleyici bir şey yapmak arasında ve derleyici yayan bir şey yapmak için donanım neden bu talimatları. Eğer CPU olabilir uçucular, standart sonra yeniden erişen gerektirmez onların düzeni korunmuş. ...

... C standardı ne yaptığı hakkında herhangi bir ayrım yapmaz, yeniden düzenleme. Ve CPU onlarla hiçbir yeniden düzenlemek için iddia edemezsin gözlemlenebilir C standart tanımlar Tamam ... bu yüzden etkisi gözlemlenebilir olarak sipariş. Bir derleyici C standardı ile uyumlu olduğunu eğer platform yaptırır kodu oluşturur, eğer bir platform standart gerektirir. Eğer standart uçucular için erişir gerektiriyorsa değil yeniden, o zaman bir platform uyumlu değil, yeniden sıralar. ...

Benim açımdan ise C standart derleyici yasaklaması halinde olmasıdır yeniden farklı uçucular, teorik olarak erişir böyle erişir sırası programın gözlemlenebilir davranış,bir parçasıdır sonra da derleyici CPU yasaklayan kod yaymak için gerektirir bunu yaparken. Standart ne arasında ayrım yapmaz derleyici ve derleyici kodu oluşturmak ne CPU yaptırır.

İki soru getirebilecek olan:""? değil mi ya Gerçek uygulamaları gerçekten ne yaparsınız?

CEVAP
10 EKİM 2014, Cuma


volatile ne yaptığını açıklamak yerine, bana volatile Ne zaman kullanmalısınız açıklamama izin verin.

  • Bir sinyal işleyicisi içinde. volatile bir değişken için yazma hemen hemen tek şey, çünkü standart bir sinyal işleyicisi yapmak için izin verir. C yana 11 std::atomic atom kilidi serbest ise sadece bu amaç için, ama kullanabilirsiniz.
  • * according to Intel*6 ile ilgili.
  • Doğrudan donanım ile ilgili ve derleyici optimize emin olmak için istediğiniz zaman veya okur yazar.

Örneğin:

volatile int *foo = some_memory_mapped_device;
while (*foo)
    ; // wait until *foo turns false

volatile belirleyici olmadan, derleyici tamamen döngü uzakta optimize etmek için izin verilir. volatile belirtici 2 Sonraki okur aynı değeri döndürür varsayalım olmayabilir derleyici söyler.

volatile konuları ile ilgisi olduğunu unutmayın. Yukarıdaki örnek çalışma yer almak yok çünkü eğer farklı bir iş parçacığı *foo yazılı olsaydı orada çalışmıyor.

Tüm diğer durumlarda, kullanım volatile kabul edilmelidir non-taşınabilir ve şifre incelemesi hariç artık ne zaman ile ilgili ön-C 11 derleyici ve derleyici uzantıları (gibi msvc /volatile:ms anahtarı olan etkin varsayılan altında 86/I64).

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Howard Pinsky

    Howard Pinsk

    6 AĞUSTOS 2006
  • RogerBuckChrist

    RogerBuckChr

    9 Temmuz 2011
  • TechXCentral

    TechXCentral

    12 Temmuz 2011