C中的哪個類型應該用來表示兩個對象的大小之間的差異?什麼類型減去2 size_t的?
由於size_t
是無符號,像
size_t diff = sizeof (small_struct) - sizeof (big_struct);
顯然不會是正確的,在我看來,沒有真正簽署等同。
ptrdiff_t
聽起來有點誘人的,但
- 就像它的名字說,這是減去指針。
- 我讀過例如像DOS這樣的分段平臺的最大對象大小爲64k,可以用16位表示。然而,遠指針由一個16位段值和一個16位偏移值組成。那麼在這樣一個32位的平臺上,這難道不會讓
ptrdiff_t
? 如果是這樣,兩個大小不同的對象之間的差異只需要16位,但使用ptrdiff_t會給你一個32位寬的變量,使它不是最優的。
那麼,什麼是合適的,便攜式的工作與這樣的價值?
Edit:
我知道ssize_t供,但它是
- 的標準C.
- 其實並不希望用於此用途不是一部分,而是用於返回無論是尺寸還是(負)誤差值。
'ssize_t'簽訂'size_t' –
@AFAIK'ssize_t'是POSIX,而不是ISO C. –
@RomanR。 'ssize_t'不是C標準,'size_t'的值不能保證適合POSIX中的'ssize_t'。 – ouah