needforspeed: use PyObject_MALLOC instead of system malloc for small
allocations. Use PyMem_MALLOC for larger (1k+) chunks. 1%-2% speedup.
This commit is contained in:
parent
2b38e40a5a
commit
2d40077b4f
|
@ -254,7 +254,7 @@ static void
|
|||
data_stack_dealloc(SRE_STATE* state)
|
||||
{
|
||||
if (state->data_stack) {
|
||||
free(state->data_stack);
|
||||
PyMem_FREE(state->data_stack);
|
||||
state->data_stack = NULL;
|
||||
}
|
||||
state->data_stack_size = state->data_stack_base = 0;
|
||||
|
@ -270,7 +270,7 @@ data_stack_grow(SRE_STATE* state, int size)
|
|||
void* stack;
|
||||
cursize = minsize+minsize/4+1024;
|
||||
TRACE(("allocate/grow stack %d\n", cursize));
|
||||
stack = realloc(state->data_stack, cursize);
|
||||
stack = PyMem_REALLOC(state->data_stack, cursize);
|
||||
if (!stack) {
|
||||
data_stack_dealloc(state);
|
||||
return SRE_ERROR_MEMORY;
|
||||
|
@ -1163,7 +1163,7 @@ entrance:
|
|||
ctx->pattern[1], ctx->pattern[2]));
|
||||
|
||||
/* install new repeat context */
|
||||
ctx->u.rep = (SRE_REPEAT*) malloc(sizeof(*ctx->u.rep));
|
||||
ctx->u.rep = (SRE_REPEAT*) PyObject_MALLOC(sizeof(*ctx->u.rep));
|
||||
ctx->u.rep->count = -1;
|
||||
ctx->u.rep->pattern = ctx->pattern;
|
||||
ctx->u.rep->prev = state->repeat;
|
||||
|
@ -1173,7 +1173,7 @@ entrance:
|
|||
state->ptr = ctx->ptr;
|
||||
DO_JUMP(JUMP_REPEAT, jump_repeat, ctx->pattern+ctx->pattern[0]);
|
||||
state->repeat = ctx->u.rep->prev;
|
||||
free(ctx->u.rep);
|
||||
PyObject_FREE(ctx->u.rep);
|
||||
|
||||
if (ret) {
|
||||
RETURN_ON_ERROR(ret);
|
||||
|
|
Loading…
Reference in New Issue