计算机的 *** 作系统中的驻留程序是什么??

计算机的 *** 作系统中的驻留程序是什么??,第1张

一般来说,我们运行的程序都是加载到内存中,系统从内存中读取运行的,到我们关闭这些程序时,这些程序不会马上从内存中退出的,还会在纳握内存中驻留。以备我们再卜仔次运行时能快速地运行。

这些我们已经关洞弊庆闭的程序,但还在内存中残留的,叫“驻留程序”。

python的内存驻留机制,是一种节省内存的方案,它将int, str, bool类蚂槐型的数据做成小数据池。当程序要创建字符串对象前会先检查池中是否有满足的字符串。

驻留机制节省大量的重复内存。在内部,小数据池是由一个全局的dict 维护,该字典中的对象成了单例模式,从而节省内存。

变量 interned 就是全局庆行存放字符串池的字典的变量名 interned = PyDict_New() ,为了让 intern 机制中的字符串不被回收,设置字典时 PyDict_SetDefault(interned, s, s) 将字符串作为键同时也作为值进行设置,这样对于字符串对象的引用计数就会进行两次 +1 *** 作,这样存于字典中的对象在程序结束前永远不会为 0,这也是 y_REFCNT(s) -= 2 将计数减 2 的原因。

从函数参数中可以看到其实字符串对象还是被创建了,内部其实始终会为字符串创建对象,但经过 inter 机制检查后,临时创建的字符串会因引用计数为 0 而被销毁,临时变量在内存中昙花一现然后迅速消誉物哗失。

指定要驻留的字符串:

为什么要进行字符串驻留呢?

总结:

系统维护一个interned全局字典,记录已被驻留的字符串对象,当新字符串a对象需要驻留时,先在interned中查找是否存在,若存在则指向已存在的字符串对象,a对象的引用计数减1,若不存在,则记录a对象到interned中。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8241329.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存