我正在寻找关于x86/x64/ia64上.NET CLR/JIT使用的内存模型之间差异的参考.我知道x86和ia64之间存在一些差异(指令重新排序,指令删除等),但我没有找到x86和x64之间差异的参考.
我有一个应用程序,旨在一些非常紧张的延迟数字,并且目前只能在x86上运行,也许在x64上运行(肯定不在ia64上).几个我想知道我是否可以依赖x86 JIT实现的一些工件并且在x64上仍然相对安全,或者我应该编程为更宽松的ia64 JIT(这将需要更多的字段是volitile并且内存屏障插入几个地方).
提前感谢任何指针.
我必须在工作中处理许多多线程编程.具体来说,我想知道ARM内存模型与IA64的区别.两者都是非常弱的模型,但是我应该知道哪些具体的差异?我熟悉ia64,而不是手臂.
我想我知道我需要使用的#ifdefs在msvc和gcc上兼容x86-32和x86-64,见下文.这些平台是否完整?
#if defined(_MSC_VER)
# if defined(_M_IA64) || defined(_M_X64)
# define SIZEOF_SIZE_T 8
# define SIZEOF_VOIDP 8
# elif defined(_M_IX86)
# define SIZEOF_SIZE_T 4
# define SIZEOF_VOIDP 4
# else
# error "Unsupported MSVC platform"
# endif
#elif defined(__GNUG__)
# if defined(__x86_64__) || defined(__ia64__)
# define SIZEOF_SIZE_T 8
# define SIZEOF_VOIDP 8
# elif defined(__i386__)
# define SIZEOF_SIZE_T 4
# define SIZEOF_VOIDP 4
# else
# error "Unsupported GCC platform"
# endif
#endif
Run Code Online (Sandbox Code Playgroud)
从C程序员的角度来看,IA64和x86 64是否相同?
我也希望能够在Mac上编译.我要添加什么?
编辑:我不能使用sizeof(),因为我正在处理使用类似东西的不可触摸的遗留代码#if SIZEOF_VOIDP == …
itanium ×4
64-bit ×2
.net ×1
abi ×1
architecture ×1
arm ×1
c ×1
memory-model ×1
portability ×1
x86 ×1