To: vim_dev@googlegroups.com Subject: Patch 7.3.454 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 7.3.454 Problem: Re-allocating memory slows Vim down. Solution: Use realloc() in ga_grow(). (Dominique Pelle) Files: src/misc2.c *** ../vim-7.3.453/src/misc2.c 2012-02-22 14:58:24.000000000 +0100 --- src/misc2.c 2012-02-22 18:07:45.000000000 +0100 *************** *** 2064,2087 **** garray_T *gap; int n; { ! size_t len; char_u *pp; if (gap->ga_maxlen - gap->ga_len < n) { if (n < gap->ga_growsize) n = gap->ga_growsize; ! len = gap->ga_itemsize * (gap->ga_len + n); ! pp = alloc_clear((unsigned)len); if (pp == NULL) return FAIL; gap->ga_maxlen = gap->ga_len + n; - if (gap->ga_data != NULL) - { - mch_memmove(pp, gap->ga_data, - (size_t)(gap->ga_itemsize * gap->ga_len)); - vim_free(gap->ga_data); - } gap->ga_data = pp; } return OK; --- 2064,2085 ---- garray_T *gap; int n; { ! size_t old_len; ! size_t new_len; char_u *pp; if (gap->ga_maxlen - gap->ga_len < n) { if (n < gap->ga_growsize) n = gap->ga_growsize; ! new_len = gap->ga_itemsize * (gap->ga_len + n); ! pp = (gap->ga_data == NULL) ! ? alloc(new_len) : vim_realloc(gap->ga_data, new_len); if (pp == NULL) return FAIL; + old_len = gap->ga_itemsize * gap->ga_maxlen; + vim_memset(pp + old_len, 0, new_len - old_len); gap->ga_maxlen = gap->ga_len + n; gap->ga_data = pp; } return OK; *** ../vim-7.3.453/src/version.c 2012-02-22 17:58:00.000000000 +0100 --- src/version.c 2012-02-22 18:09:42.000000000 +0100 *************** *** 716,717 **** --- 716,719 ---- { /* Add new patch number below this line */ + /**/ + 454, /**/ -- From "know your smileys": (X0||) Double hamburger with lettuce and tomato /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ \\\ an exciting new programming language -- http://www.Zimbu.org /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///