Python源码学习十一 一个常用的内存分配函数

原创 2013年12月04日 23:25:28
void *
_PyObject_DebugMallocApi(char id, size_t nbytes)
{
    uchar *p;           /* base address of malloc'ed block */
    uchar *tail;        /* p + 2*SST + nbytes == pointer to tail pad bytes */
    size_t total;       /* nbytes + 4*SST */

    bumpserialno();
    total = nbytes + 4*SST;
    if (total < nbytes)
        /* overflow:  can't represent total as a size_t */
        return NULL;

    p = (uchar *)PyObject_Malloc(total);
    if (p == NULL)
        return NULL;

    /* at p, write size (SST bytes), id (1 byte), pad (SST-1 bytes) */
    write_size_t(p, nbytes);
    p[SST] = (uchar)id;
    memset(p + SST + 1 , FORBIDDENBYTE, SST-1);

    if (nbytes > 0)
        memset(p + 2*SST, CLEANBYTE, nbytes);

    /* at tail, write pad (SST bytes) and serialno (SST bytes) */
    tail = p + 2*SST + nbytes;
    memset(tail, FORBIDDENBYTE, SST);
    write_size_t(tail + SST, serialno);

    return p + 2*SST;
}

SST是宏定义 4
执行的实际作用是把nbytes的值(360 in this case)写在内存区的前四个字节,然后是一个uchar型的id , 'o' in this case
接着是nbytes个浩浩荡荡的0xcb
然后是4个oxfb, 和hex形式的serialno



(PyFrameObject*)op 0x00b25528
(*((PyFrameObject*)op)).f_localsplus 0x00b25668


我们看到f_localsplus的值正是 op + offset

offset is the f_localsplus offset in PyFrameObject definition

Python list动态分配内存示例

说明python采用动态顺序表结构,每次储存元素的空间使用完之后,将动态分配原有储存空间两倍的大小的新内存作为存储空间。示例>>> a = [] >>> a.__sizeof__() 40 >>> a...
  • wx199308
  • wx199308
  • 2017年09月07日 12:56
  • 577

python中的变量怎样开辟内存

python下的变量       不需要预先声明变量的类型,变量的类型和值在赋值的那一刻被初始化(声明和定义的过程一起完成)       在python中, 每一个变量在内存中创建,我们可以通过变...
  • Com_ma
  • Com_ma
  • 2017年09月13日 03:08
  • 411

Python小工具之消耗系统指定大小内存

Python小工具之消耗系统指定大小内存工作中需要根据某个应用程序具体吃了多少内存来决定执行某些操作,所以需要写个小工具来模拟应用程序使用内存情况,下面是我写的一个Python脚本的实现。#!/usr...
  • kongxx
  • kongxx
  • 2016年06月14日 08:51
  • 2617

Python的内存管理以及垃圾回收

参考:http://www.cnblogs.com/CBDoctor/p/3781078.html 先从较浅的层面来说,Python的内存管理机制可以从三个方面来讲 (1)垃圾回收 ...
  • onlyanyz
  • onlyanyz
  • 2015年05月09日 22:46
  • 6185

Python的垃圾回收机制(二)之内存模型

0. 背景之前介绍了Python垃圾回收的简介,它简要介绍了三种垃圾回收器:引用计数回收器,标记清除回收器和世代回收器,这里会给出Python中基础类型在C语言中的内存模型,以帮助我们理解下一节三种垃...
  • tab_space
  • tab_space
  • 2016年08月27日 12:16
  • 1485

[译]Python 内存分配 垃圾回收

原文Python Garbage Collection译文Python主要使用两个策略实现内存分配。 引用计数 垃圾回收 引用计数统计在系统中,其他对象引用某个对象的次数。当一个引用移除了,这个对象的...
  • waltonhuang
  • waltonhuang
  • 2016年07月28日 15:00
  • 488

Python的内存管理机制(一 小内存块的申请)

哈哈哈,看的有点儿兴奋了,笔记下: Python内存管理
  • njys1
  • njys1
  • 2016年11月23日 23:38
  • 1409

python源码分析----内存分配(2)

上一篇说到了,在python的内存分配中两个非常重要的方法:PyObject_Malloc和PyObject_Free 在具体的来这两个方法之前,先要看看别的一些东西...
  • fjs_cloud
  • fjs_cloud
  • 2015年05月24日 20:36
  • 1002

python清除函数占用的内存

python函数执行完毕内存不会自动释放
  • u011060852
  • u011060852
  • 2017年10月09日 15:49
  • 509

python数据类型的内部实现和内存分析

http://blog.csdn.net/pipisorry/article/details/23624041?locationNum=5&fps=1Python中基本数据类型占的字节数下面的测试都是...
  • pipisorry
  • pipisorry
  • 2014年04月13日 22:48
  • 2420
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Python源码学习十一 一个常用的内存分配函数
举报原因:
原因补充:

(最多只允许输入30个字)