您的位置:首页 > 其它

greenlet source code -- g_save

2013-09-16 00:00 357 查看
g_save greenlet存在heap上的数据区间由
stack_copy
stack_copy + stack_saved
指定 这里在把greenlet的数据存到heap上时 判断之前的那段区间是否足够存放 如果不够的话 重新申请内存

static int g_save(PyGreenlet* g, char* stop)
{
/* Save more of g's stack into the heap -- at least up to 'stop'  */




intptr_t sz1 = g->stack_saved;
intptr_t sz2 = stop - g->stack_start;
assert(g->stack_start != NULL);
if (sz2 > sz1) {
char* c = (char*)PyMem_Realloc(g->stack_copy, sz2);
if (!c) {
PyErr_NoMemory();
return -1;
}
memcpy(c+sz1, g->stack_start+sz1, sz2-sz1);
g->stack_copy = c;
g->stack_saved = sz2;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: