【问题标题】:How can I find the corresponding .h file which includes the "cacheflush" function?如何找到包含“cacheflush”功能的相应 .h 文件?
【发布时间】:2021-12-28 17:36:15
【问题描述】:

我尝试在我的 Linux X86 计算机中使用 cacheflush 功能。 然而,虽然手册页声明该函数可以在“.h”文件 中找到,但我的 GCC 编译器找不到这些文件。

我能做什么?即,如何在我的程序中包含该函数以便 GCC 识别它?

【问题讨论】:

标签: c linux


【解决方案1】:

您可以简单地使用 grep 在头文件中搜索 cacheflush 函数: grep -rin cacheflush /usr/include

根据您的编译器,头文件可以位于/opt/path/to/your/compiler,检查为您的链接器提供的包含路径。

【讨论】:

  • 更简单的输入man cacheflush
【解决方案2】:

我不确定,但请阅读man cacheflush,我认为您不能。

注意:在某些架构上,没有用于此的 glibc 包装器 系统调用;见注释。

特定于架构的变体 Glibc 为这个系统调用提供了一个包装器,带有原型 在 SYNOPSIS 中显示,适用于以下架构:ARC、CSKY、 MIPS 和 NIOS2。

在其他一些架构上,Linux 提供了这个系统调用, 有不同的论点:

M68K:

  int cacheflush(unsigned long addr, int scope, int cache,
                 unsigned long len);

上海:

  int cacheflush(unsigned long addr, unsigned long len, int op);

NDS32:

  int cacheflush(unsigned int start, unsigned int end, int cache);

在上述架构中,glibc 没有为 这个系统调用;使用 syscall(2) 调用它。

如果我理解得很好,glic 确实只为 4 种架构提供 cacheflush


如果你真的想调用这个函数,gcc 专门提供了__builtin___clear_cache()(在手册页中查找),但同样不能移植到其他编译器。

【讨论】:

    【解决方案3】:

    虽然这不是我所要求的 - 在 Intel x86 中,可以使用内部 intel 命令(即 _mm_clflushopt 和 _mm_clflush)刷新无效页面。

    【讨论】:

      猜你喜欢
      • 2022-11-27
      • 1970-01-01
      • 1970-01-01
      • 2010-12-19
      • 1970-01-01
      • 2010-12-29
      • 1970-01-01
      • 1970-01-01
      • 2018-02-28
      相关资源
      最近更新 更多