【发布时间】:2016-07-17 16:57:51
【问题描述】:
include/linux/err.h中定义如下:
#define MAX_ERRNO 4095
#define IS_ERR_VALUE(x) unlikely((x) >= (unsigned long)-MAX_ERRNO)
这个想法是检查返回的有效错误号代替指针,但为什么 MAX_ERRNO 在被强制转换为无符号之前在它前面有一个一元 -?看起来这会导致 x 与最大 long 减去 MAX_ERRNO 而不是 4095 进行比较。
【问题讨论】:
-
因为地址为 0x0000 .. 0x0fff 的指针是有效的(好吧,前 16 个,IIRC,地址用于表示 NULL PTR)。但是上面的空间专用于无效[从未使用]指针。注意:我们谈论的是虚拟地址。
标签: c linux-kernel error-code