Java保證對易失性聲明的long和double(即使在32位環境中)進行原子讀/寫,而C#不會(編譯錯誤)。爲什麼C#不支持這一點,並且Java在字節碼級別上處理這個問題?Java與C#和volatile 64位類型(long,double)
0
A
回答
0
爲什麼C#不支持這個?
如果您運行的是64位系統與64位CLR版本,long
and double
reads and writes are guaranteed to be atomic:
,如果您是在64位操作系統上的64位 版本的CLR運行C#代碼,然後讀取和64個雙精度寫入和長 整數也保證
這是根據CLI specification,部分§I.12.6.6是原子:
一個符合CLI須保證讀取和寫入訪問 正確對齊的內存位置並不比本地字大小 (原生類型爲int的大小)是原子(見§I.12.6.2)時所有 寫訪問的位置都是相同的大小。原子寫入 不會改寫除寫入的位以外的位。除非明確的佈局控制 (請參閱分區II(控制實例佈局))用於更改默認行爲,否則不應超過自然字大小 (本地int的大小)的數據元素應正確對齊。對象 引用應被視爲它們存儲在原始文字大小 中。
相關問題
- 1. Long,Double和64位內存
- 2. 類型「long long」總是64位?
- 3. C中的64位數據類型(long long)的按位運算?
- 4. 32位Linux與64位Linux和MPFR之間的long long int
- 5. Java:做自己的數據類型? (例如long long double?)
- 6. C數據類型'long'在Intel x86 64位機器上
- 7. C - long double和printf問題
- 8. Java - int/long,float/double
- 9. C++ unsigned long類型和<
- 10. C++ Casting類型(SLODWORD和long)
- 11. C++`long long`變量類型
- 12. C++ Long Long INT - 64位是否僅限於64位操作系統?
- 13. Java和Eclipse - 32與64位
- 14. C++ double類型和整數類型
- 15. 32位機器與64位機器之間的C/C++:sizeof(short),sizeof(int),sizeof(long),sizeof(long long)等等...
- 16. long double return和ctypes
- 17. 在JAVA中從double到long的類型轉換
- 18. Java是什麼類型的(long a - double b)
- 19. unsigned long long to double
- 20. long double vs long int
- 21. 32位和64位的Java類路徑
- 22. 什麼是Java類型long long
- 23. Java JDK 32位與64位
- 24. C++無法將'long double'轉換爲'long double *'參數'1'變爲'long
- 25. C++整數類型自動的64位
- 26. ICallFactory與32位和64位類型庫並排
- 27. NSDecimalNumber和大的無符號long long(64位)整數
- 28. java中的類型轉換:Integer和Double
- 29. 64位類型庫和32位類型庫不同步
- 30. 如何在64位Perl中解壓縮(64位)unsigned long?
你在說什麼編譯器錯誤? – 2015-03-02 15:02:30
例如易失性字段不能是「long」類型 – Stig 2015-03-02 18:59:07