簡體   English   中英

在使用分段尋址模式的 16 位系統上,`size_t`、`uintptr_t`、`intptr_t` 和 `ptrdiff_t` 類型的實際大小是多少?

[英]What's the real size of `size_t`, `uintptr_t`, `intptr_t` and `ptrdiff_t` type on 16-bit systems using segmented addressing mode?

好吧,C 編程語言中定義的size_tuintptr_tintptr_tptrdiff_t類型真的讓我感到困惑。

我注意到在使用flat memory mode 的32 位系統上,上述四種類型的實際大小是:

sizeof(size_t) = sizeof(uintptr_t) = sizeof(intptr_t) = sizeof(ptrdiff_t) = 4

而在使用flat memory 模式的64 位系統上,上述四種類型的實際大小為:

sizeof(size_t) = sizeof(uintptr_t) = sizeof(intptr_t) = sizeof(ptrdiff_t) = 8

但是,我仍然對使用分段尋址模式的16 位系統上這四種類型的實際大小感到好奇。

根據Windows 3.1x ,Windows 3.1x 是一系列 16 位操作系統。 但是我找不到合適的 C 語言編譯器來測試和驗證真正的答案。

實模式下size_tptrdiff_t是 16 位類型。 指針的大小取決於它是 指針 、遠指針 還是大指針。 近指針有 16 位,其他 32 位。 intptr_tuintptr_t只是在 C99 中定義的很晚。

這至少可能取決於您使用的編譯器。

作為16位時代的一個數據點,Borland Turbo C++ 3.0手冊是這樣說的:

sizeof結果的整數類型是size_t ,在 stddef.h 中定義為unsigned int

(強調原文。)

unsigned int的大小為 16 位,與內存模型無關。

(您詢問的其他類型都不存在,或者,如果存在,則此特定編譯器不支持。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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