C/C++中near和far的区别
在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的区别相关推荐
- python中break和continue的区别
python中break和continue的区别 break 结束for 或者while 循环 后面还没循环到的 不再循环 continue 当满足某种条件时结束当前值的循环 后面没有循环的继续循环 ...
- java中separator_java - File.separator和路径中的斜杠之间的区别
java - File.separator和路径中的斜杠之间的区别 在Java Path-String中使用/和普通的File.separator有什么区别? 与双反斜杠相比,/平台独立似乎不是原因, ...
- PHP中self和static的区别,php中self与static的区别
原文链接,猛击这里. php中self与static的区别 通过一些示例,我们可以很容易看出self和static的区别.假定我们有class Car – 它有两个方法,model和getModel. ...
- php 抽象类 接口 区别,PHP中抽象类、接口的区别与选择分析
本文实例分析了PHP中抽象类.接口的区别与选择.分享给大家供大家参考,具体如下: 区别: 1.对接口的使用是通过关键字implements.对抽象类的使用是通过关键字extends.当然接口也可以通过 ...
- php $this self,php中self与$this的区别
学习php中self与$this的区别. 先来看下parent与self的例子: /* * parent与self的区别 * by www.jbxue.com */ class A{ function ...
- mysql中char与varchar的区别分析(补充一句,int和integer没区别)
转自:http://www.jb51.net/article/23575.htm 在mysql教程中char与varchar的区别呢,都是用来存储字符串的,只是他们的保存方式不一样罢了,char有固定 ...
- python中bytearray和java中byte[]的区别_Python经典面试题:说说Python中xrange和range的区别?...
昨晚一小伙后台问xrange和range有啥区别,讲了下他倒领悟的挺快,其实这也是你各面试Python岗位,经常会遇到的Python面试题,长个心眼哈,说不定明年3月你找工作就用上了. 废话不多说,开 ...
- python中函数和方法的区别?Python编程判断当前获取的对象是函数还是方法
python中函数和方法的区别?Python编程判断当前获取的对象是函数还是方法 目录
- SQL中where与having的区别
SQL中where与having的区别 目录 SQL中where与having的区别 创建表 插入数据 进行聚合操作 # WHERE是在聚合之前进行数据行的过滤而HAVING实在聚合之后进行新数据的过 ...
- mysql''和null,mysql中NULL和null的区别
接触php的web开发一段时间了,在进行数据库操作的时候经常会遇到一个问题,使得同一字段在页面显示时有3种类型NULL,null以及数字,当时的解决办法是将这一字段定义为varchar类型,在插入数据 ...
最新文章
- android自定义view获取控件,android 自定义控件View在Activity中使用findByViewId得到结果为null...
- 搜python编程题_100+Python编程题给你练~(附答案)
- Java对象表示方式2:XStream实现对对象的XML化
- 《从零开始学Swift》学习笔记(Day 10)——运算符是“ +、-、*、/ ”吗?
- Linux 内核源码分析 IPv6报文接收处理流程
- Spring boot显示登录用户
- Python列表中字符串转数字的方法
- Date类型JSONArray.fromObject转换出错
- 密码学系列之:Merkle–Damgård结构和长度延展攻击
- css outline color,css outline-color属性怎么用
- python2.7中文有限制么_python2.7
- Python多线程豆瓣影评API接口爬虫
- opensource项目_Opensource.com 2015社区奖的获奖者
- vue-router下的html5 history在iis服务器上的设置 vue去掉#
- 计算机无法检测到键盘,检测到不兼容的键盘驱动程序,小编教你电脑提示检测到不兼容的键盘驱动怎么办...
- DEDECMS三级导航动态调用
- openstack instance resize
- matlab 收敛,MATLAB:svds()没有收敛
- QQ公众号微信公众号,左右互搏?
- PS从入门到精通第2节——揭开PS的神秘面纱
热门文章
- win10 radmin远程不了_不用QQ也能电脑远程,win10这隐藏功能太良心了!真后悔发现太晚...
- 开机预读快还是不预读快_WIN 7下的超级预读比VISTA要好,改进不少!推荐开启超级预读!...
- SSH中为什么action需要用多例而dao层和service层为什么就用单例就可以
- 【C语言进阶深度学习记录】三十六 程序与进程的区别(程序的内存布局)
- 【原】docker部署单节点consul
- centos6.8 安装软件
- 六、表达式:前缀后缀
- GIT_服务器与本地环境构建
- [译] ASP.NET 生命周期 – ASP.NET 请求生命周期(三)
- HDU 2042:不容易系列之二