MatchStack should allocate frames in chunks and only free them in ~MatchStack Currently MatchStack will allocate a new frame each time you recurse once you've gone past FRAMES_ON_STACK frames. Instead, MatchStack should allocate frames in chunks (to avoid individual mallocs) and hold onto those chunks until ~MatchStack() is called. This would be a win for any regexp which uses more than FRAMES_ON_STACK frames in more than one place in the regexp.
This is a proposed optimization for PCRE; we no longer use PCRE.