开发者社区> 问答> 正文

说真的, 真有机器用非零空指针吗, 或者不同类型用不同的表达?

说真的, 真有机器用非零空指针吗, 或者不同类型用不同的表达?

展开
收起
游客py5kcp7dd6tu6 2022-03-29 01:07:59 386 0
1 条回答
写回答
取消 提交回答
  • 至少 PL/I, Prime 50 系列用段 07777, 偏移 0 作为空指针。后来的型号使用段 0, 偏移 0 作为 C 的空指针, 迫使类似 TCNP (测试 C 空指针) 的指令明显地成了现成 的作出错误猜想的蹩脚 C 代码。旧些的按字寻址的 Prime 机器同样因为要求字节 指针 (char *) 比字指针 (int *) 长而臭名昭著。 Data General 的 Eclipse MV 系列支持三种结构的指针格式 (字、字节和比特指针), C 编译器使用了其中之二:char * 和 void * 使用字节指针, 而其它的使用字指针。

    某些 Honeywell-Bull 大型机使用比特模式 06000 作为 (内部的) 空指针。

    CDC Cyber 180 系列使用包含环 (ring), 段和位移的 48 位指针。多数用户 (在环 11 上) 使用的空指针为 0xB00000000000。 在旧的 1 次补码的 CDC 机器上用 全 1 表示各种数据, 包括非法指针, 是十分常见的事情。

    旧的 HP 3000 系列对字节地址和字地址使用不同的寻址模式; 正如上面的机器一样, 它因此也使用不同的形式表达 char * 和 void * 型指针及其它指针。

    Symbolics Lisp 机器是一种标签结构, 它甚至没有传统的数字指针; 它使用 <NIL, 0> 对 (通常是不存在的 <对象, 偏移> 句柄) 作为 C 空指针。

    根据使用的 ``内存模式", 8086 系列处理器 (PC 兼容机) 可能使用 16 位的数据指针 和 32 位的函数指针, 或者相反。

    一些 64 位的 Cray 机器在一个字的低 48 位表示 int *; char * 使用高 16 位的 某些位表示一个字节在一个字中的偏移。

    参考资料: [K&R1, Sec. A14.4 p. 211]。

    2022-03-29 08:05:13
    赞同 展开评论 打赏
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
数据+算法定义新世界 立即下载
当泛型遇上协议 立即下载
低代码开发师(初级)实战教程 立即下载