[C] the end of the address space check
```c
if (__builtin_expect ((uintptr_t) p > (uintptr_t) -size, 0)
```
* `` size`` is `` p``'s size
``c type(x) = uintptr_t``일 때, ``c x + ~x = uintptr_t's MAX (111...11)`` 이므로
``c p + x = MAX`` 이면 ``c p = ~x``다.
``c -x = ~x + 1``이므로 ``c p = -x - 1``이다.
* 이를 대입하면 ``c x -x -1 = MAX``가 나오는데, 보통 ``c int(-1) = uintptr_t's MAX (111....11)``임을 생각해보면 된다.
따라서 ``c p = -x -1``이면 ``c p + x = uintptr_t's MAX``다.
``c x + 1 = t``로 치환하면, ``c p = -t``이면 ``c p + t = uintptr_t's MAX + 1``이므로
결과적으로, ``c p > -x``이면 ``c p + x > uintptr_t's MAX + 1``이 된다.
'Languages & Frameworks > C C++' 카테고리의 다른 글
[C] 타입 Types / Type Casting / 가변 인자 (0) | 2017.09.04 |
---|---|
[C/C++] define, inline, const, enum, enum class (0) | 2017.09.04 |
malloc/calloc tip, wrapper (0) | 2017.07.12 |
[C++] Namespace 네임스페이스 (0) | 2017.06.15 |
exec 계열 함수 (0) | 2017.05.01 |