3 回答
TA贡献1772条经验 获得超6个赞
C常见问题解答:
素50系列使用了段07777,偏移量0用于空指针,至少对于PL/I,后来的模型使用段0,偏移量0用于C中的空指针,这就需要新的指令,如tcnp(测试C空指针),显然是对所有现存的错误C代码的一种sop,这些代码做了错误的假设。较旧的、以字为地址的Prime机器也因需要更大的字节指针(char*s)而闻名于Word指针(int*s)。
DataGeneral中的EclipseMV系列有三种体系结构支持的指针格式(Word、字节和位指针),其中两种由C编译器使用:char*和void*的字节指针和用于其他所有内容的Word指针。由于历史原因,从16位Nova行到32位MV线的演变过程中,字指针和字节指针在单词中的不同位置具有偏移、间接和环保护位。将不匹配的指针格式传递给函数会导致保护错误。最后,MVC编译器添加了许多兼容性选项,以尝试处理具有指针类型不匹配错误的代码。
一些Honeywell-Bull大型机使用位模式06000作为(内部)空指针.
CDC Cyber 180系列有48位指针,由环、段和偏移组成.大多数用户(在第11圈中)都有0xB00000000000的空指针。在旧的cdc ONE补码机上,使用全位字作为各种数据的特殊标志是很常见的,包括无效的地址。
旧的HP 3000系列使用了与字地址不同的字节地址寻址方案;因此,与上面的几台机器一样,它对char*和void*指针使用了与其他指针不同的表示形式。
SymbolicsLispMachine是一种带标记的体系结构,它甚至没有传统的数字指针;它使用这对(基本上是一个不存在的句柄)作为C空指针。
根据正在使用的“内存模型”,8086系列处理器(PC兼容)可以使用16位数据指针和32位函数指针,反之亦然。
一些64位Cray机器在单词的下48位中表示int*;char*另外使用上16位中的一些来表示一个字内的字节地址。
TA贡献1810条经验 获得超4个赞
int *pInt = malloc(sizeof(int));int far *fpInt = _fmalloc(sizeof(int));printf("pInt: %d, fpInt: %d\n", sizeof(pInt), sizeof(fpInt));
TA贡献1836条经验 获得超5个赞
sizeof(void*) >= sizeof(T*)
sizeof(int*) == 8
, sizeof(void*) == 4
- 3 回答
- 0 关注
- 520 浏览
添加回答
举报