Perl-совместимые регулярные выражения (Perl-compatible regular expressions)
AVOIDING EXCESSIVE STACK USAGE
When matching with the pcre_exec()
function, PCRE implements
backtracking by making recursive calls to an internal function
called match()
. In environments where the size of the stack is
limited, this can severely limit PCRE's operation. (The Unix
environment does not usually suffer from this problem, but it may
sometimes be necessary to increase the maximum stack size. There
is a discussion in the pcrestack
documentation.) An alternative
approach to recursion that uses memory from the heap to remember
data, instead of using recursive function calls, has been
implemented to work round the problem of limited stack size. If
you want to build a version of PCRE that works this way, add
--disable-stack-for-recursion
to the configure
command. With this configuration, PCRE will use
the pcre_stack_malloc
and pcre_stack_free
variables to call
memory management functions. By default these point to malloc()
and free()
, but you can replace the pointers so that your own
functions are used instead.
Separate functions are provided rather than using pcre_malloc
and
pcre_free
because the usage is very predictable: the block sizes
requested are always the same, and the blocks are always freed in
reverse order. A calling program might be able to implement
optimized functions that perform better than malloc()
and free()
.
PCRE runs noticeably more slowly when built in this way. This
option affects only the pcre_exec()
function; it is not relevant
for pcre_dfa_exec()
.