首页
社区
课程
招聘
[未解决,已结帖] [求助]x64下如何对某块内存进行cache无效并不回写到内存 50.00雪花
2022-12-23 10:05 7735

[未解决,已结帖] [求助]x64下如何对某块内存进行cache无效并不回写到内存 50.00雪花

2022-12-23 10:05
7735

    如题,请问各位大佬,x64下如何对某块内存进行cache无效并不回写到内存?


    目的主要是为了做个测试:写内存->cache无效->读内存,读出来的数据是写之前的还是写之后的;


    看了intel的文档,invd指令可以无效cache并不回写内存,但是用了这个指令电脑会蓝屏,而且这个指令也不知道如何指定之内区域;


    求各位路过的大佬指点一下,感激不尽!


[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
点赞1
打赏
分享
最新回复 (4)
雪    币: 2142
活跃值: (3543)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
R0g 2 2022-12-24 05:30
2
0
cache无效可以,不写回不是爆炸了吗
雪    币: 228
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
迷人的win 2022-12-24 09:28
3
0
R0g cache无效可以,不写回不是爆炸了吗
想只对局部内存进行操作,比如自己申请的一块内存
雪    币: 189
活跃值: (267)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Niceto 2022-12-26 23:24
4
0

在 x64 架构下,你可以使用 _mm_clflush 函数来对某块内存进行 cache 无效,并且不回写到内存。这个函数是由 SSE2 指令集提供的,可以在多线程程序中使用。

#include <xmmintrin.h>

// 声明 _mm_clflush 函数
void _mm_clflush(char* p);

int main()
{
    char* p = (char*)malloc(1024);
    // 对 p 指向的内存块进行 cache 无效
    _mm_clflush(p);
    return 0;
}

注意,_mm_clflush 函数只能在 x64 架构下使用,并且需要 SSE2 指令集的支持。

另外,如果你想要在 x86 架构下对某块内存进行 cache 无效


在 x86 架构下,你可以使用 clflush 指令来对某块内存进行 cache 无效,并且不回写到内存。

雪    币: 228
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
迷人的win 2022-12-27 09:36
5
0
Niceto 在 x64 架构下,你可以使用 _mm_clflush 函数来对某块内存进行 cache 无效,并且不回写到内存。这个函数是由 SSE2 指令集提供的,可以在多线程程序中使用。#include& ...

intel文档里对_mm_clflush的描述: 

Description 

Invalidates from every level of the cache hierarchy in the cache coherence domain the cache line that contains the linear address specified with the memory operand. If that cache line contains modified data at any level of the cache hierarchy, that data is written back to memory. The source operand is a byte memory location.

这个指令是会回写到内存的吧?

游客
登录 | 注册 方可回帖
返回