In include/linux/err.h, gibt es folgende definiert:Warum wirft IS_ERR_VALUE negative MAX_ERRNO auf eine vorzeichenlose Länge?
#define MAX_ERRNO 4095
#define IS_ERR_VALUE(x) unlikely((x) >= (unsigned long)-MAX_ERRNO)
Die Idee ist, für eine gültige Fehlernummer an die Stelle eines Zeigers zurück zu überprüfen, aber warum tut hat MAX_ERRNO eine unäre -
vor ihm, bevor sie als nicht signiert? Es scheint, wie dies in x auf die maximale MAX_ERRNO lang minus verglichenen führen würde, anstatt zu 4095
Da die Zeiger mit Adressen 0x0000 .. 0x0fff gültig sind (OK, erste 16, IIRC, Adressen werden verwendet, um NULL PTR darzustellen). Aber der obere Platz ist für * ungültige [nie verwendete] Zeiger * reserviert. NB: Wir sprechen über virtuelle Adressen. – 0andriy