2

我现在正在尝试编译某人的代码,而该人正在使用变量 HZ(我认为它代表赫兹代表 CPU 的赫兹),但编译器抱怨该变量未定义。我的猜测是这个人没有包含正确的头文件。

那么有谁知道 HZ 是在哪个头文件中定义的?

谢谢

编辑:编译适用于 Debian g++ 版本 4.3.2
我正在使用的设置 - OSX Leopard 10.5.8,g++ 版本 4.0.1 是它失败的地方。

4

4 回答 4

8

保罗的回答是正确的,但我会扩大一点。

Linux 有一个编译时选项,它决定了内核定时器的频率。大约在 HZ 定义的频率下,内核调度程序将中断进程并开始其调度工作。(一个相关的特性是 DynTicks 选项,它省略了 HZ 值,并根据工作负载更改中断频率。)最常见的设置是 100。高响应系统可能使用 1000。最近的内核版本使用默认值 250。系统计算工作量大的可能使用较小的值(以最小化调度程序的影响)。

因此,它是一个非常特定于 Linux 的值,您只会发现它在/usr/include/asm/param.h

由于 100 是一个常见值,因此您可以安全地添加-DHZ=100CXXFLAGS变量中。这绝不意味着该程序实际上可以在 OS X 上运行,只是它可以编译.

于 2009-12-26T05:05:05.740 回答
6

在我的 Linux 机器上,它定义在/usr/include/asm/param.h:#define HZ 100

我在 Mac OS X 机器上的任何地方都找不到定义。

于 2009-12-26T02:46:39.580 回答
0

它可能来自命令行:

c++ -DHZ=1000 file.cpp -o file.o

很难说更多没有更多细节。这是什么操作系统?

于 2009-12-26T02:38:44.227 回答
0

答案在Linux Kernel 5.8.0上似乎不再相关- 头文件中只有一行,/usr/include/asm/param.h如下所示。我不知道他们为什么那样做。

#include <asm-generic/param.h>

你会#define HZ/usr/include/asm-generic/param.h. 下面的代码可以在我的 Ubuntu 发行版中找到,它可能与Linux中的不同,因为它是一个依赖于体系结构的值。

// ...
#ifndef HZ
#define HZ 100
#endif
// ....
于 2021-02-16T14:48:32.980 回答