百科问答小站 logo
百科问答小站 font logo



C 语言中不同类型指针的大小是否完全相同,为什么? 第1页

  

user avatar   be5invis 网友的相关建议: 
      

现代 CPU 上是。

位数低的老 CPU 和嵌入式 CPU 那就不一定了,像 8086 就因为其分段的内存模型,引入了三种不同的指针:

  1. Near,大小为 16 位;
  2. Far,大小为 32 位(段 + 偏移),不进行规范化,指向的数据结构不能跨段;
  3. Huge,大小为 32 位(段 + 偏移),有规范化:这种指针的算术运算需要特殊实现来支持跨段的大型数据结构。

对于这些平台,往往一组 malloc/free 是不够的,它们的 C 库都会提供多组不同的分配/回收函数来从内存的不同区域分配内存。

如果涉及 EMS/XMS 之类需要驱动才能使用的扩展内存的话,它们分配给你搞不好就不是常规的指针了,而是一个特殊的 Handle,你需要调取驱动里面的功能来访问它们对应的内存。

对于更旧的 CPU 比如 6502,这些平台的原生程序往往都不会用 C……




  

相关话题

  这个代码int函数无返回值且开-O2,for循环会无限循环,是什么原因? 
  你见过哪些令你瞠目结舌的C#代码? 
  如何实现 C/C++ 与 Python 的通信? 
  C语言中,stdio.h是最重要的头文件吗? 
  C 语言中指针数组和数组指针、函数指针、指向函数的指针等等该怎么理解? 
  C语言编译器是如何实现指针+1这样的一个机制? 
  学习完C语言后应该学什么? 
  C 语言中的 double 类型所能表示的数的范围为什么这么大,不是说只占32(或64)位吗? 
  有一台不会坏掉的电脑,这台电脑上只有vc++6.0,给一个人一亿年的时间,能创造出现在的各种软件吗? 
  写库函数供他人用的原理是什么? 

前一个讨论
一般编程的时候,使用汇编能比使用高级语言(比如C,C++,java等)有更高的运行效率吗?高能高出多少呢?
下一个讨论
中国能肢解印度吗?





© 2024-06-28 - tinynew.org. All Rights Reserved.
© 2024-06-28 - tinynew.org. 保留所有权利