size_t实际上是指针大小

Jon*_*röm 12 c

首先,我要澄清,我现在非常熟悉的定义size_tintptr_t,我不希望他们完成的任务的任何重复.

相反,我想知道以下内容.你知道任何平台,除了 x86/DOS(带有难以忍受的内存模型)演员阵容

void* a = ...;
size_t b = (size_t)a;
Run Code Online (Sandbox Code Playgroud)

实际上丢失了比特或字节?

谢谢!

eld*_*rge 9

AS/400指针上的AFAIK 是128位,但size_t定义为32位.

  • 它不是编译器的缺陷,它的硬件/ OS编译器的特性必须匹配.标准没有规定`intptr_t`类型的存在理由是指针大小可能与任何其他类型都没有关联,因此将它存储在'普通'整数变量中是不可能的.参看 在(理论上)用于x86实模式的C99编译器`intptr_t`将是32位(存储`far ptr`),但`size_t`将是16位,因为连续的存储区大小限于一个段. (7认同)
  • 将指针强制转换为`size_t`总是有效的.您可以有效地处理结果是另一个问题. (2认同)