首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >32/64位原子性

32/64位原子性
EN

Stack Overflow用户
提问于 2010-06-26 09:09:47
回答 2查看 1.4K关注 0票数 5

问题在于64位加载/存储操作何时被视为原子操作。

  • 如果我有64位处理器,但我使用的是32位操作系统。我会有64位原子性吗?
  • 如果我使用64位操作系统,但运行一个32位应用程序(使用WoW64),那么我会有64位原子性吗?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-06-26 09:28:57

应用程序必须在64位操作系统上运行,并以原生64位模式运行,这样才能获得x64的优势,这是不足为奇的。如果您在32位模式下运行,无论是在32位操作系统上(使用32位应用程序),您都将获得32位原子性。如果在64位CPU上的64位操作系统上运行64位模式,您将获得64位原子性。链中的所有组件(app、OS、CPU)必须运行64位才能获得64位。

票数 4
EN

Stack Overflow用户

发布于 2010-06-26 09:54:51

不是默认的!但是x86下的一些SSE指令支持64位和128位的原子加载/存储,当然,您必须首先确保内存的增加。看例子:

代码语言:javascript
复制
procedure Move64(var Source, Destination);
//Move 8 bytes atomicly from Source 8-byte aligned to Destination!
asm
  movq  xmm0, qword [Source]
  movq  qword [Destination], xmm0
end;

procedure Move64(newData: pointer; newReference: cardinal; var Destination); overload; 
//Move 8 bytes atomically into 8-byte Destination!
asm
  movd  xmm0, eax
  movd  xmm1, edx
  punpckldq xmm0, xmm1
  movq  qword [Destination], xmm0
end; 

procedure Move128(var Source, Destination);
//Move 16 bytes atomicly from Source to 16-byte aligned to Destination!
asm
  movdqa  xmm0, dqword [Source]
  movdqa  dqword [Destination], xmm0
end;
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3123326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档