The C data type size does not depend on the machine platform. It depends on the compiler implementation. Two different compilers on the same hardware platform might implement basic types differently, resulting in completely different sizes.
You should also take into account the fact that such standard types as size_t
are not guaranteed to be represented by user-accessible types like unsigned int
. It is quite legal and possible that size_t
might be implemented through an implementation-specific unsigned type of unknown size and range.
Also, theoretically (and pedantically) C language has no "biggest" type in terms of size. C language specification makes absolutely no guarantees about the relative sizes of the basic types. C language only makes guarantees about the relative ranges of the representable values of each type. For example, the language guarantees that the range of int
is not smaller than the range of short
. However, since [almost] any type can contain an arbitrary amount of padding bits, theoretically the object size of type short
might be greater than that of type int
. This would be, of course, a very exotic situation.
In practice though, you can expect that long long int
is the biggest integral type and long double
is the biggest floating point type. You can also include the complex types into the consideration, if you wish to do so.