1.这里将句柄所能标识的所有东西(如窗口、文件、画笔等)统称为“对象”。

2.图中一个小横框表示一定大小的内存区域,并不代表一个字节,如标有0X00000AC6的横框表示4个字节。

 

程序运行到某时刻的内存快照               程序往后运行到另一时刻时的内存快照

Windows是一个以虚拟内存为基础的操作系统,很多时候,进程的代码和数据并不全部装入内存,进程的某一段装入内存后,还可能被换出到外存,当再次需要时,再装入内存。两次装入的地址绝大多数情况下是不一样的。也就是说,同一对象在内存中的地址会变化。那么,程序怎么才能准确地访问到对象呢?为了解决这个问题,Windows引入了句柄。

系统为每个进程在内存中分配一定的区域,用来存放各个句柄,即一个个32位无符号整型值(32位操作系统中)。每个32位无符号整型值相当于一个指针,指向内存中的另一个区域(我们不妨称之为区域A)。而区域A中存放的正是对象在内存中的地址。当对象在内存中的位置发生变化时,区域A的值被更新,变为当前时刻对象在内存中的地址,而在这个过程中,区域A的位置以及对应句柄的值是不发生变化的。这种机制,用一种形象的说法可以表述为:有一个固定的地址(句柄),指向一个固定的位置(区域A),而区域A中的值可以动态地变化,它时刻记录着当前时刻对象在内存中的地址。这样,无论对象的位置在内存中如何变化,只要我们掌握了句柄的值,就可以找到区域A,进而找到该对象。而句柄的值在程序本次运行期间是绝对不变的,我们(即系统)当然可以掌握它。

所以,我们可以这么理解句柄:

数值上,是一个32位无符号整型值(32位系统下);

逻辑上,相当于指针的指针;

形象理解上,是Windows中各个对象的一个唯一的、固定不变的ID;

作用上,Windows使用句柄来标识诸如窗口、位图、画笔等对象,并通过句柄找到这些对象。

关于句柄,再交代一些关键性细节:

1.所谓“唯一”、“不变”是指在程序的一次运行中。如果本次运行完,关闭程序,再次启动程序运行,那么这次运行中,同一对象的句柄的值和上次运行时比较,一般是不一样的。

其实这理解起来也很自然,所谓“一把归一把,这把是这把,那把是那把,两者不相干”(“把”是形象的说法,就像打牌一样,这里指程序的一次运行)。

2.句柄是对象生成时系统指定的,属性是只读的,程序员不能修改句柄。

3.不同的系统中,句柄的大小(字节数)是不同的,可以使用sizeof()来计算句柄的大小。

4.通过句柄,程序员只能调用系统提供的服务(即API调用),不能像使用指针那样,做其它的事。

参考链接:

https://www.cnblogs.com/zpcdbky/p/4652151.html

操作系统中的句柄是什么?相关推荐

  1. Symbian操作系统中的线程和进程

    在Symbian操作系统中,每个进程都有一个或多个线程.线程是执行的基本单位.一个进程的主线程是在进程启动时生成的. Symbian属于抢占式多任务操作系统,这意味着每个线程都有自己的执行时间,直到系 ...

  2. linux六种进程状态,Linux操作系统中进程的七种状态

    Linux操作系统中进程的七种状态 发布时间:2018-05-07 20:43, 浏览次数:741 , 标签: Linux 1 Linux中进程的七种状态(1)R运行状态(runing):并不意味着进 ...

  3. 如何避免操作系统中多线程资源竞争的互斥与同步?

    作者 | 小林coding 来源 | 小林coding(ID:CodingLin) 前言 先来看看虚构的小故事 已经晚上 11 点了,程序员小明的双手还在键盘上飞舞着,眼神依然注视着的电脑屏幕. 没办 ...

  4. 解决windows 10英文版操作系统中VS2017控制台程序打印中文乱码问题

    当您在windows 10英文版的操作系统中运行Vs2017控制台应用程序时,程序可能无法正常显示中文,中文都变成了乱码.这是由于大部分中文程序所使用的文字编码与Windows 英文系统的文字编码不同 ...

  5. 在 Linux“.NET研究” 操作系统中运行 ASP.NET 4 (下)

    "在 Linux 操作系统中运行 ASP.NET 4 (中)"中已经配置好了 openSUSE 11.3 操作系统. 现在,我们进入"GNOME 终端",使用 ...

  6. 操作系统中的进程与线程

    简介 在传统的操作系统中,进程拥有独立的内存地址空间和一个用于控制的线程.但是,现在的情况更多的情况下要求在同一地址空间下拥有多个线程并发执行.因此线程被引入操作系统. 为什么需要线程? 如果非要说是 ...

  7. 中断技术在计算机系统中的应用,中斷在操作系统中的应用.doc

    中斷在操作系统中的应用 中断在操作系统中的应用 (**大学 电子信息学院, 四川 成都 610065) 摘要: 计算机执行期间,系统内如果发生任何非寻常的或非预期的急需处理事件,使得CPU暂时中断当前 ...

  8. 洋哥大讲堂之解决Windows10操作系统中,“启用或关闭windows功能”里没有IE选项的问题...

    最近有一些学员反馈,在安装的Windows10操作系统中,找不到IE11浏览器,并且在"启用或关闭windows功能"里也没有IE选项,如下图所示: 找遍了所有的资料也没有解决问题 ...

  9. 【Linux 内核】Linux 操作系统结构 ( Linux 内核在操作系统中的层级 | Linux 内核子系统及关系 | 进程调度 | 内存管理 | 虚拟文件系统 | 网络管理 | 进程间通信 )

    文章目录 一.Linux 内核在操作系统中的层级 二.Linux 内核子系统 三.Linux 内核子系统之间的关系 一.Linux 内核在操作系统中的层级 Linux 内核 所在层级 : 整个计算机系 ...

  10. 40.简述操作系统中调用过程?

    讲过程之前,让我们先明白什么是调用? 但是讲调用之前又需要明白两个概念 核心态和用户态. 操作系统中的状态可以分为核心态(管态)和用户态(目态). 程序有些是特权指令,特权指令是只能在核心态运行,不能 ...

最新文章

  1. 服务器架设笔记——Apache模块开发基础知识
  2. 美研究最新生物活性玻璃 可消灭致命的细菌
  3. SpringMVC源码分析(8)剖析ViewResolver
  4. 第四周实践项目2 算法库——单链表
  5. mysql LOCK TABLES
  6. powershell 启动线程与关闭线程
  7. android sudio提示快捷键冲突解决
  8. Excel的html转换成unicode,EXCEL表格中把汉字转换成unicode编码
  9. Android 5.0以上heads up通知
  10. 用了SSD,再用传统机械硬盘电脑,SuperMan(撒泼慢,撒泼男)
  11. Java 基础实验 自由落体
  12. 泰坦尼克号沉船数据分析与可视化、数据建模与分类预测【Python | 机器学习-Sklearn】
  13. 用 IAR C/C++ For ARM 编写嵌入式应用的启动细节
  14. 初中计算机的组成试讲教案模板小学语文,初中语文面试试讲教案
  15. 零售药店计算机操作内容培训,零售药店的年度培训记录.docx
  16. 台达DOP系列触摸屏上传程序时提示“中止传输数据”怎样解决?
  17. C++ 集合set 详解
  18. python自动修改论文格式_论文格式自动修改
  19. yum搭建lnmp环境(CentOS6.4)
  20. 弘辽科技:抖音小店评价引流怎么去做呢?

热门文章

  1. php获取qq音乐的api类,利用QQ音乐api集成的php歌曲搜索
  2. 万字长文,知识图谱构建技术综述
  3. 轻量级的java HTTP Server——NanoHttpd
  4. 全国省市区(县)级地名xml(一)
  5. IOCCC(The International Obfuscated C Code Contest)
  6. Delphi中TWebBrowser的用法
  7. vim打开bin文件
  8. 红linux系统,红帽linux系统官方下载-红帽linux系统32位v9.0 完整版 - 极光下载站
  9. Centos7安装java运行环境
  10. 使用计算机时应先按,自考试题及答案《计算机应用基础》