delphij's Chaos

选择chaos这个词是因为~~实在很难找到一个更合适的词来形容这儿了……

01 Jun 2011

sizeof(void *)和sizeof(int(*)(void))

以前一直没注意过这个问题,今天在邮件列表看到 Matthew Flemming 发的邮件才知道实际上 C 标准并不保证 sizeof(void *) == sizeof(int(*)(void))。不过,几乎所有的现代系统上这个等式都是成立的。

例外的情况是类似 x86 实模式这类分段的内存模型中,函数指针可能默认是个far pointer(不过话说,现在还有人为这样的硬件写C吗?);另外据说IA64上也不一样,不过没有办法证实或证伪。


Archived: 5 Comments

w1e3 | May 31, 2011 7:09 PM

我觉得 x86 就是历史遗留的大笑话。。。
MIPS 爱好者路过。

hayate | June 1, 2011 5:40 AM

cpp爱好者表示此类话题没有压力

chys | June 1, 2011 6:33 PM

没用过Windows for Itanium,但是可以保证Linux/IA64 下面两个sizeof都是8.

zelor | June 22, 2011 7:05 AM

X86保护模式(非平坦模式)下也有类似情况,比如OS2是这类。

zelor | June 22, 2011 7:08 AM

X86保护模式的非平坦模式也有长短指针,比如OS2之类。