【发布时间】:2016-04-03 13:04:58
【问题描述】:
嗯,C 编程语言中定义的size_t、uintptr_t、intptr_t 和ptrdiff_t 类型真的让我很困惑。
我注意到在使用flat memory mode的32位系统上,以上四种类型的实际大小是:
sizeof(size_t) = sizeof(uintptr_t) = sizeof(intptr_t) = sizeof(ptrdiff_t) = 4
而在64位系统上使用flat memory mode,以上四种类型的实际大小为:
sizeof(size_t) = sizeof(uintptr_t) = sizeof(intptr_t) = sizeof(ptrdiff_t) = 8
但是,我仍然对这四种类型在使用分段寻址模式的16位系统上的实际大小感到好奇。
根据Windows 3.1x,Windows 3.1x 是一系列 16 位操作系统。但是我找不到合适的 C 语言编译器来测试和验证真正的答案。
【问题讨论】:
-
你不应该在操作系统博物馆从事这项工作;)
-
“但我找不到合适的 C 语言编译器来测试和验证真正的答案。” - 我想你会发现 Windows 3.1 早于这些标准伪类型。
-
回到 windows 3.1 和 dos 3.x...6.x 天,x86..286 的内存模型被明确地建模。编译器意识到了这一点。 Borland C++ (2.x...3.x) 和 MSVC 都具有相似的内存模型类,您可以选择通用来编译您的程序(使用大、小、巨大...)内存模型进行编译。或者您可以沉迷于#pragma 狂欢来进行细粒度控制。
-
在一个很远很远的标签里......