<p>I notice that modern C and C++ code seems to use <code>size_t</code> instead of <code>int</code>/<code>unsigned int</code> pretty much everywhere - from parameters for C string functions to the STL.  I am curious as to the reason for this and the benefits it brings.</p>

The
```
size_t
```
type is the unsigned integer type that is the result of the
```
sizeof
```
operator (and the
```
offsetof
```
operator), so it is guaranteed to be big enough to contain the size of the biggest object your system can handle (e.g., a static array of 8Gb).
The
```
size_t
```
type may be bigger than, equal to, or smaller than an
```
unsigned int
```
, and your compiler might make assumptions about it for optimization.
You may find more precise information in the C99 standard, section 7.17, a draft of which is available on the Internet in
pdf
format, or in the C11 standard, section 7.19, also available as a
pdf draft
.