(C) the end of the address space check
1
2
if (\_\_builtin\_expect ((uintptr\_t) p > (uintptr\_t) -size, 0)
* size
is p
’s size
type(x) = uintptr\_t
일 때, x + ~x = uintptr\_t's MAX (111...11)
이므로 p + x = MAX
이면 c p = ~x
다.
-x = ~x + 1
이므로 p = -x - 1
이다. * 이를 대입하면 x -x -1 = MAX
가 나오는데, 보통 int(-1) = uintptr\_t's MAX (111....11)
임을 생각해보면 된다.
따라서 p = -x -1
이면 p + x = uintptr\_t's MAX
다. x + 1 = t
로 치환하면, p = -t
이면 p + t = uintptr\_t's MAX + 1
이므로
결과적으로, p > -x
이면 p + x > uintptr\_t's MAX + 1
이 된다.
This post is licensed under CC BY 4.0 by the author.