Mercurial > vim
changeset 13333:b4e7082de11d v8.0.1541
patch 8.0.1541: synpat_T is taking too much memory
commit https://github.com/vim/vim/commit/36f923014a7eb7e24c4b0b88719cad14351e3a60
Author: Bram Moolenaar <Bram@vim.org>
Date: Sat Feb 24 21:36:34 2018 +0100
patch 8.0.1541: synpat_T is taking too much memory
Problem: synpat_T is taking too much memory.
Solution: Reorder members to reduce padding. (Dominique Pelle, closes https://github.com/vim/vim/issues/2671)
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Sat, 24 Feb 2018 21:45:04 +0100 |
parents | 9589d8567f54 |
children | 5650890fc3fb |
files | src/syntax.c src/version.c |
diffstat | 2 files changed, 13 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/src/syntax.c +++ b/src/syntax.c @@ -145,30 +145,32 @@ static char *(spo_name_tab[SPO_COUNT]) = * * A character offset can be given for the matched text (_m_start and _m_end) * and for the actually highlighted text (_h_start and _h_end). + * + * Note that ordering of members is optimized to reduce padding. */ typedef struct syn_pattern { char sp_type; /* see SPTYPE_ defines below */ char sp_syncing; /* this item used for syncing */ + short sp_syn_match_id; /* highlight group ID of pattern */ + short sp_off_flags; /* see below */ + int sp_offsets[SPO_COUNT]; /* offsets */ int sp_flags; /* see HL_ defines below */ #ifdef FEAT_CONCEAL int sp_cchar; /* conceal substitute character */ #endif + int sp_ic; /* ignore-case flag for sp_prog */ + int sp_sync_idx; /* sync item index (syncing only) */ + int sp_line_id; /* ID of last line where tried */ + int sp_startcol; /* next match in sp_line_id line */ + short *sp_cont_list; /* cont. group IDs, if non-zero */ + short *sp_next_list; /* next group IDs, if non-zero */ struct sp_syn sp_syn; /* struct passed to in_id_list() */ - short sp_syn_match_id; /* highlight group ID of pattern */ char_u *sp_pattern; /* regexp to match, pattern */ regprog_T *sp_prog; /* regexp to match, program */ #ifdef FEAT_PROFILE syn_time_T sp_time; #endif - int sp_ic; /* ignore-case flag for sp_prog */ - short sp_off_flags; /* see below */ - int sp_offsets[SPO_COUNT]; /* offsets */ - short *sp_cont_list; /* cont. group IDs, if non-zero */ - short *sp_next_list; /* next group IDs, if non-zero */ - int sp_sync_idx; /* sync item index (syncing only) */ - int sp_line_id; /* ID of last line where tried */ - int sp_startcol; /* next match in sp_line_id line */ } synpat_T; /* The sp_off_flags are computed like this: