Old said:
Does size_t have to be the same as another integral type?
In C90, it must be one of unsigned char, short, int, or
long. In C99, it can be any of those, or unsigned long long,
or another implementation-defined unsigned integral type. The
Standard says it "should" be wider than unsigned long only if
the implementation actually supports object sizes that would
require it, but "should" is suggestive and not prescriptive.
For example, could we have a system with 36-bit size_t, and no other
integral types exceeding 32 bits?
In C90, no: size_t must be one of the "ordinary" types,
so that type (and perhaps others) must also be 36 bits wide
and hence wider than 32 bits. In C99, no: unsigned long long
must be at least 64 bits wide, hence wider than a 36-bit
size_t.
But that's not quite the question you meant to ask, I think.
The "exceeding" changes the meaning a little; what you're after
is whether size_t can have a width that is not the same as any
other integral type. In C90, no: size_t *is* a synonym for one
of the ordinary types. In C99, I think the answer is yes: one
could have an implementation with 9-bit unsigned char, 18-bit
ushort, 27-bit uint, 36-bit size_t, 45-bit ulong, and 72-bit
ullong. (It's widely understood that ptrdiff_t is the same
width as size_t, but I can't find language that requires this.
Also, there might be <stdint.h> types that are 36 bits wide,
but I don't think they're required to be present.)