菜鸟求教

Y_I_Y 2013-05-28 01:49:48
很想知道WINDOWS内句柄大概的操作过程是什么的,我知道句柄有个值,可是有的资料说这个值是进程句柄表中的索引,有的说是句柄所指向资源的大小,有的又说是资源在内存中的线性地址,到底怎么才是对的?还是这些说法其实都是对应了一部分句柄的情况?从申请一个句柄到使用,到释放,系统是怎么操作的?
...全文
107 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
asdjy123 2013-05-28
  • 打赏
  • 举报
回复
我认为句柄是一个指针的指针,上面G_1的值变化是因为你创建的线程在内存的存储地址的变化。
asdjy123 2013-05-28
  • 打赏
  • 举报
回复
我认为句柄的一个指针的指针,上面G_1的值变化是因为你创建的线程在内存的存储地址的变化。 我的参考: 句柄是一个标识符,是拿来标识对象或者项目的。应用程序几乎总是通过调用一个WINDOWS函数来获得一个句柄,之后其他的WINDOWS函数就可以使用该句柄,以引用相应的对象。 如果想更透彻一点地认识句柄,我可以告诉大家,句柄是一种指向指针的指针。我们知道,所谓指针是一种内存地址。应用程序启动后,组成这个程序的各对象是驻留在内存中的。简单地理解,似乎我们只要获知这个内存的首地址,就可以随时用这个地址访问对象了。如果您真的这样认为,那您可就大错特错了。我们知道,Windows是一个以虚拟内存为基础的操作系统。在这种系统环境下,Windows内存管理器经常在内存中来回移动对象,以此来满足各种应用程序的内存需要。对象被移动意味着它的地址变化了。如果地址总是如此变化,我们该到哪里去找那一个对象呢? 为了解决这个问题,Windows操作系统为全体应用程序腾出一些内存单元,用来专门登记各应用程序的对象在内存中的地址的变化,而前者的物理地址在系统运行期间是始终保持不变的。Windows内存管理器移动了对象在内存中的位置后,会把该对象新的地址及时地告知给对应的句柄进行更新。这样我们只要知道这个句柄,就可以间接地知道对象具体在内存中的哪个位置了。这个地址是在对象装载(Load)时由系统分配给的,当对象卸载时(Unload)又释放给系统。 上面参考的文字来历:http://baike.baidu.com/view/194921.htm的作用模块
Y_I_Y 2013-05-28
  • 打赏
  • 举报
回复
其实我比较希望能知道,假如我创建了一个句柄,那系统是怎么帮我管理这个句柄的,这个句柄创建和我使用的函数有什么关联吗?比如我在VS里面创建一个线程,得到一个句柄,假如它是的名字是G_1,在运行的时候将鼠标停在上面会出现G_1|0X12345678(54345678)(数字都是我随便写的),有时候遇到的句柄却只有G_2|0X12345678(?)这种情况。虽然这些都不影响使用,我只是想知道而已····
Y_I_Y 2013-05-28
  • 打赏
  • 举报
回复
引用 3 楼 VisualEleven 的回复:
句柄的数据结构未知,是由操作系统才维护其相关的数据结构。
能帮我解答下那些疑问吗?
Eleven 2013-05-28
  • 打赏
  • 举报
回复
句柄的数据结构未知,是由操作系统才维护其相关的数据结构。
wubinyang 2013-05-28
  • 打赏
  • 举报
回复
围观 ~求学习~个人观点:句柄就是个国旗,代表的是当前的对象~
Eleven 2013-05-28
  • 打赏
  • 举报
回复
进程句柄表中的索引

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧