相关疑难解决方法(0)

__builtin___clear_cache 是如何工作的?

通过 gcc 文档,我偶然发现了内置函数__builtin___clear_cache

— 内置函数:void __builtin___clear_cache (char *begin, char *end) 该函数用于为begin inclusive 和end exclusive 之间的内存区域刷新处理器的指令缓存。某些目标要求在修改包含代码的内存后刷新指令缓存,以获得确定性行为。

如果目标不需要指令缓存刷新,则 __builtin___clear_cache 无效。否则,要么内联发出指令以清除指令缓存,要么调用 libgcc 中的 __clear_cache 函数。

我觉得这很有趣,但令人惊讶。在很多情况下,当前堆栈的大量指令存储在 L1 缓存(指令缓存)中。因此,乍一看,这个内置函数可能会显着破坏我们程序的流程,因为它会清除堆栈中的下一条指令。

此指令是否还会重新填充 L1 缓存中的堆栈部分?

这似乎不太可能。如果没有,那么我想用户有责任使用权利beginend参数,以免破坏我们的过程。在实践中,如何找到正确beginend使用的东西?

c++ caching built-in

5
推荐指数
1
解决办法
6679
查看次数

标签 统计

built-in ×1

c++ ×1

caching ×1