那么,用C编程语言定义的size_t
, uintptr_t
, intptr_t
和ptrdiff_t
types真的令我困惑。
我注意到在使用平面内存模式的 32位系统上,以上四种types的实际尺寸是:
sizeof(size_t) = sizeof(uintptr_t) = sizeof(intptr_t) = sizeof(ptrdiff_t) = 4
在使用平坦内存模式的 64位系统上,以上四种types的实际尺寸是:
sizeof(size_t) = sizeof(uintptr_t) = sizeof(intptr_t) = sizeof(ptrdiff_t) = 8
但是,我仍然对使用分段寻址模式的 16位系统上这四种types的实际大小感到好奇。
根据Windows 3.1x ,Windows 3.1x是一系列的16位操作系统。 但我找不到合适的C语言编译器来testing和validation真正的答案。
在实模式下 , size_t
和ptrdiff_t
是16位类型。 指针的大小取决于它是近,远,还是巨大的指针。 近指针有16位,其他32位。 intptr_t
和uintptr_t
只在C99后面定义。
这至少可能取决于你使用的编译器。
作为一个来自16位时代的数据点,Borland Turbo C ++ 3.0手册有这样的说法:
sizeof结果的整数类型是size_t ,在stddef.h中定义为unsigned int 。
(强调原文)
unsigned int
的大小是16位,独立于内存模型。
(您询问的其他类型还没有存在,或者如果他们确实存在,则不受此特定编译器支持。)