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