zoukankan      html  css  js  c++  java
  • python的list内存分配算法

    前提:python为了提高效率会为list预先分配一定的内存空间供其使用,避免在每次append等操作都去申请内存,下面简单分析下list的内存分配算法,主要就是两段。

    1、当没有元素时,newsize为0,allocated也为0,满足下面的判断条件,当前分配内存为0,list的长度也为0。

    2、当插入一个元素,newsize为1,allocated为0,不满足判断,需要走下面的流程,newsize右移三位为0,小于9为3,所以new_allocated为0 + 3 = 3,再加上当前的size 1 就是4,所以在有数据时,分配的最小内存为4。

    3、继续插入1个元素,又回到该段,allocated为4,大于2,newsize=allocated右移一位,所以,allocated不变,只改变list的长度,再插入仍然是这步,因为newsize为3大于allocated/2

    4、插入的5话,就又走到这一步,因为newsize为5已经大于allocated右移一位了,所以,new_allocated为0 + 3 + 5等于8,所以allocated分配0,4,之后是8。

    5、我们继续往后推几个内存空间,当为9时,则 1 + 6 +9 = 16;为17时,则 2 + 6 +17 = 25;为26时,则 3 + 6 + 26 = 35;之后是一样的就不推了,0,4,8,16,25,35。。。

    6、当newsize减小时,算法逻辑是一样的,需要注意的是,当newsize降为0时,new_allocate也会变为0:

  • 相关阅读:
    AutoCAD.NET 二次开发(一) 自定义菜单及自动加载
    WSS 3.0部署备忘 一
    WSS 3.0部署备忘 四
    WSS 3.0部署备忘 三
    WSS 3.0部署备忘 二
    loj_1042
    loj_1045
    vim的学习笔记(3)
    Linux的磁盘与文件管理系统(1)
    文件与文件系统的压缩与打包
  • 原文地址:https://www.cnblogs.com/small-office/p/9438191.html
Copyright © 2011-2022 走看看