应该使用 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 的一部分。
- 实际上不是用于这种用途,而是用于返回大小或(负)错误值。