The C standard (ISO/IEC 9899:2011 or 9899:1999) defines a type `ptrdiff_t` in `<stddef.h>`.

The POSIX standard (ISO/IEC 9945; IEEE Std 1003.1-2008) defines a type `ssize_t` in `<sys/types.h>`.

* What is the difference between these types (or why were both deemed necessary)?
* Is there an implementation where the underlying base type for `ssize_t` is not the same as for `ptrdiff_t`?