size_t is usually defined as unsigned long, but on 64-bit platforms,
stdint.h currently defines SIZE_MAX using "ull" (unsigned long long).
Although this is the same width, it doesn't necessarily have the same
alignment or calling convention. It also triggers printf warnings when
using the format flag "%zu" to print SIZE_MAX.
- Is there a better way to get the right type for SIZE_MAX?
- Should we do this for ptrdiff_t as well?
Do we really define __SIZE_TYPE__ to unsigned a for some target?