a = b如果条件c成立,我需要自动分配,如果条件不成立,则不分配.有没有办法在C/C++中做到这一点?
澄清:我的意思是原子地"测试和分配",而不是"原子分配".
对于x86-64架构,是否有一条指令可以将给定内存地址的数据加载到缓存中?类似地,是否存在可以在给定与该高速缓存行对应的存储器地址(或类似高速缓存行标识符)的情况下逐出高速缓存行的指令?
为了满足某些安全属性,我想确保一个重要数据在语句访问时已经在缓存中(因此不会有缓存未命中).例如,对于此代码
...
a += 2;
...
Run Code Online (Sandbox Code Playgroud)
我想确保a在a += 2执行之前就在缓存中.
我正在考虑使用PREFETCHhx86 的指令来实现这个目的:
...
__prefetch(&a); /* pseudocode */
a += 2;
...
Run Code Online (Sandbox Code Playgroud)
但是,我已经读过,之前插入预取指令a += 2可能为时已晚,无法确保a在a += 2执行时是否在缓存中.这个说法是真的吗?如果是,我可以通过CPUID在预取之后插入指令来修复它,以确保执行了prefectch指令(因为英特尔手册中说明了相关PREFETCHh的命令CPUID)?