[英]When could sizeof(size_t) and sizeof(ptrdiff_t) differ?
什么時候sizeof(size_t)
和sizeof(ptrdiff_t)
有所不同?
這有什么現實世界的例子嗎?
注意,我知道所有標准都說這些類型是實現定義的。 但我知道的所有實現, sizeof(size_t)
和sizeof(ptrdiff_t)
等於。 也許是因為一些奇怪(或不那么奇怪)的原因,它們可能會有所不同。
看來, sizeof(ptrdiff_t)<sizeof(size_t)
不是一個非常有用的情況,因為對於大型數組,指針算法非常有限。
另一種情況, sizeof(ptrdiff_t)>sizeof(size_t)
可能稍微有用,因為所有指針減法都將在數組上定義(如果存在比PTRDIFF_MAX
更大的數組,則將為所有遠程元素定義指針減法,與通常情況下sizeof(ptrdiff_t)==sizeof(size_t)
)。 有沒有真正的實現呢? 這種方法是否還有其他有用的屬性?
一個合理的情況是經典的8086.由於數組大小限制為64K段, size_t
可以是16位。 但是,要支持128 kB范圍(-64kB至+ 64kB)的ptrdiff_t
,您需要17位。
這里的問題是指針類型不是一個普通的字節計數器,它在64 kB之后回繞。
這是Borland C ++ 3.1的stddef.h
的摘錄:
#if defined(__LARGE__) || defined(__HUGE__) || defined(__COMPACT__)
typedef long ptrdiff_t;
#else
typedef int ptrdiff_t;
#endif
typedef unsigned size_t;
因此,如果內存模型很大,很大或很緊湊(這些內存模型意味着數據可能大於64KiB),那么sizeof(ptrdiff_t)
是4,而sizeof(size_t)
總是2。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.