threads que hilos ejercicios caracteristicas c posix

c - que - posix threads



¿Cuál es la diferencia entre ssize_t y ptrdiff_t? (2)

¿Hay una implementación donde el tipo de base subyacente para ssize_t no es el mismo que para ptrdiff_t?

x86-16 con el modelo de memoria grande. Los punteros están lejos (32 bits), pero los objetos individuales están limitados a un segmento (por lo que size_t puede tener 16 bits).

El estándar C (ISO / IEC 9899: 2011 o 9899: 1999) define un tipo ptrdiff_t en <stddef.h> .

El estándar POSIX (ISO / IEC 9945; IEEE Std 1003.1-2008) define un tipo ssize_t en <sys/types.h> .

  • ¿Cuál es la diferencia entre estos tipos (o por qué ambos se consideraron necesarios)?
  • ¿Hay una implementación donde el tipo de base subyacente para ssize_t no es el mismo que para ptrdiff_t ?

El documento Open Group Base Specifications Issue 7, IEEE Std 1003.1, 2013 Edition, description of <sys/types.h> dice:

El tipo ssize_t es capaz de almacenar valores al menos en el rango [-1, SSIZE_MAX].

En otras palabras, ssize_t está firmado, pero el conjunto de valores negativos que puede representar puede limitarse a solo {-1}.

Un ptrdiff_t , por otro lado, garantiza tener un rango positivo / negativo más simétrico.

Admito que, en la práctica, no parece probable que ssize_t sea ​​tan limitado en el rango negativo, pero es posible.

Por supuesto, otra diferencia es que ptrdiff_t está disponible siempre que esté programando en C o C ++ estándar, pero ssize_t puede no estar disponible a menos que tenga como objetivo un sistema POSIX estándar.