• 句柄的意义和作用以及句柄和指针的区别


    今天学习了句柄和指针的概念,做个学习笔记。

    句柄

      什么是句柄?首先这个单词听起来就有点怪,只知道有把柄,句柄对应单词是handle,把手,一个门把手可以打开一扇房间的门,句柄是一个特殊的代号,windonw系统可以通过一个特定的句柄打开一个特定的对象,所以这个句柄就是一个特殊作用的代号编码。

    为什么有句柄?句柄的作用是什么?

      程序的运行需要使用内存来存储数据和指令,cpu根据内存的地址来取对应的数据,然而物理内存的大小空间在安装好后是固定不变的,在程序运行中可能出现物理内存不够的情况,这个时候windows系统开发者就想出一个虚拟内存机制,通过该机制cpu不再直接用物理内存地址来访问内存数据,而是经过虚拟内存里逻辑地址来访问内存数据,虚拟内存里有一张映射关系表,存储了每个逻辑地址和物理地址的相应关系,有了这个映射表,就可以不再拘泥于物理内存的一些不足,例如空间不足,物理内存碎片不能连续分配地址等,用逻辑地址先找到对应物理地址后就能找到数据。

      但是,虚拟内存机制虽然解决了内存的上述问题,却在后续的使用中还是有新的问题出现,这就是为什么又会出现句柄,下面来看一下原因。

      如下图所示,物理地址灰色部分1,3,4,5,6等已经存上了数据,白色背景代表的2,7,9,10,15可以存数据但是已经被打断,如果借用虚拟内存就可以用连续不打断的一套逻辑地址来分配地址,这样就有了windows下的虚拟内存机制,但是虚拟内存管理灵活变动的优点也就意味着里面的地址对应关系会经常发生变动,像之前的逻辑地址1->物理地址2的关系 如果变成了 逻辑地址8->物理地址2的话,cpu如果不知道这个变动,还拿着之前的 逻辑地址1->物理地址2的关系 来找的话就会出错,所以虚拟内存机制还是不完善,这种映射关系的变动如果做个管理登记的话这个问题就好办了,句柄就有这样的作用。

    假如之前cpu 是通过  句柄1 -> 逻辑地址1 -> 物理地址2 这个关系一路找到数据,当逻辑地址1->物理地址2这个关系变成 逻辑地址8->物理地址2的时候, 系统在 句柄1的关系那也修改成 句柄1->逻辑地址8->物理地址2.

    --------------------------------------------------------------------------------

    变动对比如下:

    句柄1 -> 逻辑地址1 -> 物理地址2

      变成

    句柄1 -> 逻辑地址8 -> 物理地址2,

    --------------------------------------------------------------------------------

    这个也有点像日常生活中的户口登记一样,关系的变动都要在户口上进行相应的操作才行。

    这样不管虚拟内存的逻辑地址和物理地址对应关系怎么变化,只要每次变化通知相应的句柄做个记录,cpu通过同一个句柄就总能找到要找的数据。

    所以这个句柄就是像一个指向指针的指针。

     这里说的是windows系统下句柄的作用,在liunx下用文件描述符,具体还要进一步学习一下

  • 相关阅读:
    [Java学习] Java包装类、拆箱和装箱详解
    [Java学习] Java多态和动态绑定
    [Java学习] Java继承的概念与实现
    [Java学习] Java super关键字
    [Java代码] Java是自学好还是参加培训班好?
    [Java学习] Java字符串(String)
    [Java学习] Java方法重载
    [.NET源码] EF的增删改查
    C#面向服务WebService从入门到精通
    CoordinatorLayout-带图片伸缩工具栏
  • 原文地址:https://www.cnblogs.com/luckylihuizhou/p/6398784.html
Copyright © 2020-2023  润新知