簡體   English   中英

什么時候sizeof(size_t)和sizeof(ptrdiff_t)會有所不同?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM