Skip to content
Snippets Groups Projects
  • Kevin P. Fleming's avatar
    a0090681
    Optimizations to the stringfields API · a0090681
    Kevin P. Fleming authored
    This patch provides a number of optimizations to the stringfields API, focused around saving (not wasting) memory whenever possible. Thanks to Mark Michelson for inspiring this work and coming up with the first two optimizations that are represented here:
    
    Changes:
    
    - Cleanup of some code, fix incorrect doxygen comments
    
    - When a field is emptied or replaced with a new allocation, decrease the amount of 'active' space in the pool it was held in; if that pool reaches zero active space, and is not the current pool, then free it as it is no longer in use
    
    - When allocating a pool, try to allocate a size that will fit in a 'standard' malloc() allocation without wasting space
    
    - When allocating space for a field, store the amount of space in the two bytes immediately preceding the field; this eliminates the need to call strlen() on the field when overwriting it, and more importantly it 'remembers' the amount of space the field has available, even if a shorter string has been stored in it since it was allocated
    
    - Don't automatically double the size of each successive pool allocated; it's wasteful
    
    http://reviewboard.digium.com/r/165/
    
    
    
    git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@185581 65c4cc65-6c06-0410-ace0-fbb531ad65f3
    a0090681
    History
    Optimizations to the stringfields API
    Kevin P. Fleming authored
    This patch provides a number of optimizations to the stringfields API, focused around saving (not wasting) memory whenever possible. Thanks to Mark Michelson for inspiring this work and coming up with the first two optimizations that are represented here:
    
    Changes:
    
    - Cleanup of some code, fix incorrect doxygen comments
    
    - When a field is emptied or replaced with a new allocation, decrease the amount of 'active' space in the pool it was held in; if that pool reaches zero active space, and is not the current pool, then free it as it is no longer in use
    
    - When allocating a pool, try to allocate a size that will fit in a 'standard' malloc() allocation without wasting space
    
    - When allocating space for a field, store the amount of space in the two bytes immediately preceding the field; this eliminates the need to call strlen() on the field when overwriting it, and more importantly it 'remembers' the amount of space the field has available, even if a shorter string has been stored in it since it was allocated
    
    - Don't automatically double the size of each successive pool allocated; it's wasteful
    
    http://reviewboard.digium.com/r/165/
    
    
    
    git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@185581 65c4cc65-6c06-0410-ace0-fbb531ad65f3