Python源码学习十一 一个常用的内存分配函数
来源:互联网 发布:node 命令行参数 编辑:程序博客网 时间:2024/03/29 07:04
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源码学习十一 一个常用的内存分配函数
- DMA分配内存常用的几个函数
- C++学习011-常用内存分配及释放函数
- MFC中常用的内存分配及释放函数
- STL源码-内存的分配
- 一个C++构造函数,内存分配的例子
- 定义一个函数模板,为指定的数据类型分配内存。
- python源码分析----内存分配(1)
- python源码分析----内存分配(2)
- c语言常用内存分配函数详解
- 常用分配内存函数简介及比较
- linux 常用内存分配函数小结
- C语言一些常用内存分配函数
- Python学习笔记(十一):Python函数
- uboot源码阅读(十一)内存分配与nand存储分配
- Redis源码学习之【内存分配】
- c的内存分配函数
- ******************* 常见的内存分配函数 *******************
- Java分形
- How to run scripts under Linux
- 经典排序算法之bin排序
- root lenovo A690
- 完美编译 firefly+cocos2d-x对战类手机网游《进击的9秒》V1.1版本的win32版本
- Python源码学习十一 一个常用的内存分配函数
- linux简单命常用令
- win32中调用Atl控件
- cocos 2d x 在运行时候修改分辨率
- ORA-01123:无法启动联机备份;未启用介质恢复(错误分析)
- 串口的历程库
- 你可知道利用独立博客进行淘宝客推广方法
- 高斯滤波
- 未分类--Windows API--GetProcessHeap Function