Какой тип в C следует использовать для представления разницы между размерами двух объектов?
Поскольку size_t
не имеет знака, что-то вроде
size_t diff = sizeof (small_struct) - sizeof (big_struct);
очевидно, не было бы правильным, и мне кажется, что нет реального подписанного эквивалента.
ptrdiff_t
звучит соблазнительно, но
- как и его имя, говорит об этом для вычитания указателей.
- Я читал, например, сегментированные платформы, такие как DOS, имеют максимальный размер объекта 64k, который представляется 16-разрядным. Однако дальние указатели состоят из 16-разрядного значения сегмента и 16-разрядного значения смещения. Разве это не сделало бы
ptrdiff_t
на такой платформе 32-битной? Если это так, разница между двумя объектами в размере требует только 16 бит, но использование ptrdiff_t даст вам 32-битную ширину переменной, что делает ее не оптимальной.
Итак, какой подходящий переносимый тип для работы с таким значением?
Edit:
Я знаю о ssize_t, но это
- не является частью стандартного C.
- на самом деле не предназначен для такого использования, но для возврата значения размера или (отрицательного) значения.