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...

简单理解python下的变量和内存

相信学过c的人,对变量和内存了解的差不多,可是,python中他们是一样的吗??? No,(尽管说,python就是用c写的) 1,python下的变量...

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

上一篇说到了,在python的内存分配中两个非常重要的方法:PyObject_Malloc和PyObject_Free 在具体的来这两个方法之前,先要看看别的一些东西...

python中的变量怎样开辟内存

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

Python内存管理机制

Python内存管理机制Python内存管理机制主要包括以下三个方面: 引用计数机制 垃圾回收机制 内存池机制 引用计数举个例子说明引用是什么:a = 1如上为一个简单的赋值语句,1就是对象,a就是引...

自己实现一个内存缓存

最近了解了下缓存技术,主要分为内存缓存 和磁盘缓存,然后分布式里面有一些消息的推送,节点的一些处理。现在很多的用OSCache,EhCache 等等,资料很多,暂时就不多说了,我这里仅仅为了了解缓存框...

malloc函数与free函数

malloc函数与free函数 malloc函数 Malloc 向系统申请分配指定size个字节的内存空间。返回类型是 void* 类型。void* 表示未确定类型的指针。C,C++规定,void...

python 基本数据类型占用内存空间大小

python中基本数据类型和其他的语言占用的内存空间大小有很大差别 import sys a = 100 b = True c = 100L d = 1.1 e ="" ...

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

原文Python Garbage Collection译文Python主要使用两个策略实现内存分配。 引用计数 垃圾回收 引用计数统计在系统中,其他对象引用某个对象的次数。当一个引用移除了,这个对象的...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Python源码学习十一 一个常用的内存分配函数
举报原因:
原因补充:

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