美文网首页
内存管理

内存管理

作者: 匿隱 | 来源:发表于2019-02-12 09:33 被阅读0次

1.数据的存储

内存分为栈区间和堆区间;从底层来看,栈区间的内存的开辟和释放是系统自动管理的,堆区间的内存是由程序员通过代码开辟(malloc)和释放的
从python语言角度,栈区间的内存的开辟和释放是系统自动管理的,堆区间的内存关键也已经封装好了,
程序员也不需要写代码来开辟空间和释放空间

a.

python中变量本身是存在栈区间的,函数调用过程是在栈区间; 对象都是存在堆区间(python中所有数据都是对象)

b.

变量赋值过程:先堆区间开辟空间将数据存起来, 然将数据对应的地址存到栈区间的变量中。
数字和字符串比较特殊,赋值的时候不会直接开辟空间,而是先检测之前有没有存储过这个数据,
如果有就用之前的数据的地址

2.内存释放(垃圾回收机制)原理:

python中的每个对象都有一个属性叫'引用计数',表示当前对象的引用的个数。判断一个对象是否销毁就看对象的引用计数是否为0;
为0的就销毁,不为0的就不销毁。

getrefcount函数:
getrefcount(对象) -> 获取对象的引用计数

from sys import getrefcount

def main():
    list1 = [1, 2]
    print(getrefcount(list1))      # 2

    # 使用不同的变量存对象地址会增加引用计数
    list2 = list1
    print(getrefcount(list1))     # 3

    [1, list1]
    print(getrefcount(list1))    # 3

    # def func1(obj):
    #     print(getrefcount(list1))
    #
    # func1(list1)

    print(getrefcount(list1))

    list1 = []
    print(getrefcount(list2))   # 2

    del list2
    # print(getrefcount(list2))   # UnboundLocalError


    # def getrefcount(obj):
    #     obj = list1
    #     获取obj的引用计数

    bullets = [{'x': 10, 'y': 20}, {'x': 30, 'y': 10}, {'x': 100, 'y': 200}]
    del bullets[2]

    bullets.pop(0)

相关文章

  • iOS内存管理详解

    目录 block内存管理 autorelease内存管理 weak对象内存管理 NSString内存管理 new、...

  • 第10章 内存管理和文件操作

    1 内存管理 1.1 内存管理基础 标准内存管理函数堆管理函数虚拟内存管理函数内存映射文件函数 GlobalMem...

  • 操作系统之内存管理

    内存管理 包括内存管理和虚拟内存管理 内存管理包括内存管理概念、交换与覆盖、连续分配管理方式和非连续分配管理方式(...

  • JavaScript —— 内存管理及垃圾回收

    目录 JavaScript内存管理内存为什么需要管理?内存管理概念JavaScript中的内存管理JavaScri...

  • OC - OC的内存管理机制

    导读 一、为什么要进行内存管理 二、内存管理机制 三、内存管理原则 四、MRC手动内存管理 五、ARC自动内存管理...

  • 3. 内存管理

    内存管理 内存管理包含: 物理内存管理; 虚拟内存管理; 两者的映射 除了内存管理模块, 其他都使用虚拟地址(包括...

  • Go语言——内存管理

    Go语言——内存管理 参考: 图解 TCMalloc Golang 内存管理 Go 内存管理 问题 内存碎片:避免...

  • jvm 基础第一节: jvm数据区

    程序内存管理分为手动内存管理和自动内存管理, 而java属于自动内存管理,因此jvm的职能之一就是程序内存管理 j...

  • 内存管理

    内存管理的重要性。 不进行内存管理和错误的内存管理会造成以下问题。 内存泄露 悬挂指针 OC内存模型 内存管理是通...

  • 11-AutoreleasePool实现原理上

    我们都知道iOS的内存管理分为手动内存管理(MRC)和自动内存管理(ARC),但是不管是手动内存管理还是自动内存管...

网友评论

      本文标题:内存管理

      本文链接:https://www.haomeiwen.com/subject/kwxljqtx.html