Hi,
I'm a total beginner in PCRE2, now I'm "playing" with the code.
I reviewed the man pages and documentation. If I'm not mistaken, PCRE2
supports JIT (on most popular architectures - eg. AMD64), but the user has
to turn it on.
The pcre2jit man page says
*In some circumstances you may need to call additional functions. These are
described in the section entitled "Controlling the JIT stack" below.*
Is there any way to decide, in which case do I need to use those functions?
I mean the patterns are totally unknown to me, it could be very complex or
can be very simple.
Now I try this solution:
https://github.com/digitalwave/msc_retest/blob/pcre2support-jit/src/regex.cc#L161-L195
I chose 1MB, because man page says
*A maximum stack size of 512KiB to 1MiB should be more than enough for any
pattern.*
Do I need to add the manual stack allocation? Or would be enough just
simple call the
pcre2_jit_compile(re, PCRE2_JIT_COMPLETE);
and if the call fails, then match won't use JIT - but the application won't
terminate?
Calling the
pcre2_jit_stack_create(1, 1024 * 1024, NULL);
allocates the whole 1MB of memory? I just ask, because I showed some
details about compiled regex in that code, and it says:
DETAILED INFORMATION:
=====================
PCRE2_INFO_BACKREFMAX: 0
PCRE2_INFO_CAPTURECOUNT: 0
PCRE2_INFO_DEPTHLIMIT: 4294967295
PCRE2_INFO_JITSIZE: 76976
PCRE2_INFO_MINLENGTH: 3
PCRE2_INFO_MATCHLIMIT: 4294967295
PCRE2_INFO_SIZE: 20149
The PCRE2_INFO_JITSIZE: 76976 means it uses almost 77kB of 1MB, but the 1MB
has been allocated? So if I have 200 regexes, then it means the application
needs +200MB memory?
Thanks for your helps,
a.