Open Qinch opened 5 years ago
_save_stack函数中dummy变量定义在coroutine_yield是不是更好?
static void _save_stack(struct coroutine *C, char *top, char *bottom) { //top:stack bottom:sp assert(top - bottom <= STACK_SIZE); if (C->cap < top - bottom) { free(C->stack); C->cap = top-bottom; C->stack = malloc(C->cap); } C->size = top - bottom; memcpy(C->stack, bottom, C->size); } void coroutine_yield(struct schedule * S) { int id = S->running; assert(id >= 0); struct coroutine * C = S->co[id]; assert((char *)&C > S->stack); char dummy = 0; _save_stack(C,S->stack + STACK_SIZE, &dummy); C->status = COROUTINE_SUSPEND; S->running = -1; swapcontext(&C->ctx , &S->main); }
这样会多压一个,函数call栈
感觉这里可以适当采用宏函数去展开,抵消掉函数调用压入的返回地址等的空间
_save_stack函数中dummy变量定义在coroutine_yield是不是更好?