首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将C/C++变量存储在处理器缓存中,而不是系统内存中

将C/C++变量存储在处理器缓存中,而不是系统内存中
EN

Stack Overflow用户
提问于 2012-02-16 03:46:47
回答 5查看 11K关注 0票数 9

在运行Linux的英特尔x86平台上,在C/C++中,如何告诉操作系统与硬件将值(如uint32)存储在一级/二级缓存中,而不是系统内存中?例如,假设出于安全或性能原因,我不想在DRAM中存储32位密钥(32位无符号整数),而只希望将其存储在处理器的缓存中。我该怎么做呢?我在Intel Xeon处理器上使用Fedora 16 (Linux 3.1和gcc 4.6.2)。

非常感谢您的帮助!

EN

回答 5

Stack Overflow用户

发布于 2012-02-16 03:52:24

我不认为您能够强制将变量存储在处理器的缓存中,但是您可以使用register关键字建议编译器将给定的变量分配到CPU寄存器中,声明如下:

代码语言:javascript
复制
register int i;
票数 5
EN

Stack Overflow用户

发布于 2012-02-16 03:52:38

在x86 (或者据我所知的任何平台)上没有cpu指令可以让你强制CPU在L1/L2缓存中保留一些东西。更不用说向C/C++这样的高级语言公开如此低层次的细节了。说你需要这样做是为了“性能”,如果没有更多关于你所关注的性能的上下文,那么这是没有意义的。为什么你的程序如此依赖于只访问缓存中的数据。说你需要这个来保证安全,这似乎是一个糟糕的安全设计。在任何一种情况下,您都必须提供更多的详细信息,说明您在这里到底想要做什么。

票数 5
EN

Stack Overflow用户

发布于 2012-02-16 03:52:48

简而言之,你不能-这不是这些缓存的目的-它们从主内存馈送,以加快访问速度,或允许分支预测和流水线等高级技术。

有一些方法可以确保高速缓存用于某些数据,但它仍然驻留在ram中,并且在抢占式多任务操作系统中,您不能保证您的高速缓存内容不会通过任何两个指令之间的上下文切换而消失,除非是通过“停止世界”或低级原子操作,但它们通常用于非常、非常、非常短的指令序列,这些指令序列根本不能被中断,例如用于自旋锁的增量和提取,而不是一次性处理密码算法。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9300218

复制
相关文章

相似问题

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