在80286以前的微处理器(CPU)组成的确16位机上,Windows操作系统(包括DOS)对于内存是分段使用的(分段内存模式,Segment   Memory   Mode)。运行在这些16位CPU微机上的Windows(Windows   1.0-3.1)被称为“Win16”。从80386开始的32位CPU开始,为了兼容,也采用上述分段内存模式,这就导致了near(short)、 far(long)指针的出现。

从Windows   95开始的32位机上,Windows支持32位平面内存模式(与“分段内存模式”区别),相应地,Windows   95以后的Windows也就是我们常说的“Win32”。为Win32写的程序使用32位的线性地址空间。

由此可见,如果你想写在Win16上也能运行的程序,才会涉及到newr、far指针的概念。在Win32上,指针无near、far的区分。

存贮属性:C指针有三种存贮属性,分别是:

near   (近)指针:16位段内偏移地址

far(远)指针:16位段地址+16位段内偏移地址

huge(巨)指针:32位规格化的具有唯一性的内存地址

C语言的存贮属性由六种编译模式决定(参见TC集成环境菜单中的option->compiler->model选项),默认的编译模式为 small,   在该编译模式下,指针的默认属性为near。

C/C++中near和far的区别

关键字near和far受目标计算机体系结构的影响。目前编程中使用不多。

near关键字创建一个指向可寻址内存低端部分的目标指针。这些指针占用内存的单一字节,并且他们能够指向的内存单元被限制到256个位置,通常是在 0x0000~0x00ff范围中。

int near * ptr;

far关键字创建一个能够指向内存中任何数据的指针:

char far * ptr;

near   (近)指针:16位段内偏移地址

far(远)指针:16位段地址+16位段内偏移地址

huge(巨)指针:32位规格化的具有唯一性的内存地址

C语言的存贮属性由六种编译模式决定(参见TC集成环境菜单中的option->compiler->model选项),默认的编译模式为 small,   在该编译模式下,指针的默认属性为near。

补充:near指针是16位指针,依赖一个段地址寄存器,指针变量就是位移量,利用段地址寄存器+指针 来寻址,所以有64K之限制。

far 指针是32位指针,不但有16位的位移量,还有16位的段地址,但此指针有个缺陷,增量时只加到位移部分,一旦16位的位移量超过了FFFF就会回到这个 段地址的初始。

所以,又引入了huge指针,huge指针与far一样,其区别仅在于使用了标准化的方法来表示,这样所有的地址都有一个唯一的表示方法,从而避免了 far指针的问题。

空指针规定了一种指针状态,如果没有这个空指针,就如数字没有了0。

C/C++中near和far的区别相关推荐

  1. python中break和continue的区别

    python中break和continue的区别 break 结束for 或者while 循环  后面还没循环到的 不再循环 continue 当满足某种条件时结束当前值的循环 后面没有循环的继续循环 ...

  2. java中separator_java - File.separator和路径中的斜杠之间的区别

    java - File.separator和路径中的斜杠之间的区别 在Java Path-String中使用/和普通的File.separator有什么区别? 与双反斜杠相比,/平台独立似乎不是原因, ...

  3. PHP中self和static的区别,php中self与static的区别

    原文链接,猛击这里. php中self与static的区别 通过一些示例,我们可以很容易看出self和static的区别.假定我们有class Car – 它有两个方法,model和getModel. ...

  4. php 抽象类 接口 区别,PHP中抽象类、接口的区别与选择分析

    本文实例分析了PHP中抽象类.接口的区别与选择.分享给大家供大家参考,具体如下: 区别: 1.对接口的使用是通过关键字implements.对抽象类的使用是通过关键字extends.当然接口也可以通过 ...

  5. php $this self,php中self与$this的区别

    学习php中self与$this的区别. 先来看下parent与self的例子: /* * parent与self的区别 * by www.jbxue.com */ class A{ function ...

  6. mysql中char与varchar的区别分析(补充一句,int和integer没区别)

    转自:http://www.jb51.net/article/23575.htm 在mysql教程中char与varchar的区别呢,都是用来存储字符串的,只是他们的保存方式不一样罢了,char有固定 ...

  7. python中bytearray和java中byte[]的区别_Python经典面试题:说说Python中xrange和range的区别?...

    昨晚一小伙后台问xrange和range有啥区别,讲了下他倒领悟的挺快,其实这也是你各面试Python岗位,经常会遇到的Python面试题,长个心眼哈,说不定明年3月你找工作就用上了. 废话不多说,开 ...

  8. python中函数和方法的区别?Python编程判断当前获取的对象是函数还是方法

    python中函数和方法的区别?Python编程判断当前获取的对象是函数还是方法 目录

  9. SQL中where与having的区别

    SQL中where与having的区别 目录 SQL中where与having的区别 创建表 插入数据 进行聚合操作 # WHERE是在聚合之前进行数据行的过滤而HAVING实在聚合之后进行新数据的过 ...

  10. mysql''和null,mysql中NULL和null的区别

    接触php的web开发一段时间了,在进行数据库操作的时候经常会遇到一个问题,使得同一字段在页面显示时有3种类型NULL,null以及数字,当时的解决办法是将这一字段定义为varchar类型,在插入数据 ...

最新文章

  1. android自定义view获取控件,android 自定义控件View在Activity中使用findByViewId得到结果为null...
  2. 搜python编程题_100+Python编程题给你练~(附答案)
  3. Java对象表示方式2:XStream实现对对象的XML化
  4. 《从零开始学Swift》学习笔记(Day 10)——运算符是“ +、-、*、/ ”吗?
  5. Linux 内核源码分析 IPv6报文接收处理流程
  6. Spring boot显示登录用户
  7. Python列表中字符串转数字的方法
  8. Date类型JSONArray.fromObject转换出错
  9. 密码学系列之:Merkle–Damgård结构和长度延展攻击
  10. css outline color,css outline-color属性怎么用
  11. python2.7中文有限制么_python2.7
  12. Python多线程豆瓣影评API接口爬虫
  13. opensource项目_Opensource.com 2015社区奖的获奖者
  14. vue-router下的html5 history在iis服务器上的设置 vue去掉#
  15. 计算机无法检测到键盘,检测到不兼容的键盘驱动程序,小编教你电脑提示检测到不兼容的键盘驱动怎么办...
  16. DEDECMS三级导航动态调用
  17. openstack instance resize
  18. matlab 收敛,MATLAB:svds()没有收敛
  19. QQ公众号微信公众号,左右互搏?
  20. PS从入门到精通第2节——揭开PS的神秘面纱

热门文章

  1. win10 radmin远程不了_不用QQ也能电脑远程,win10这隐藏功能太良心了!真后悔发现太晚...
  2. 开机预读快还是不预读快_WIN 7下的超级预读比VISTA要好,改进不少!推荐开启超级预读!...
  3. SSH中为什么action需要用多例而dao层和service层为什么就用单例就可以
  4. 【C语言进阶深度学习记录】三十六 程序与进程的区别(程序的内存布局)
  5. 【原】docker部署单节点consul
  6. centos6.8 安装软件
  7. 六、表达式:前缀后缀
  8. GIT_服务器与本地环境构建
  9. [译] ASP.NET 生命周期 – ASP.NET 请求生命周期(三)
  10. HDU 2042:不容易系列之二