Skip to content
  • Nobuyoshi Nakada's avatar
    9bc73cd8
    array.c: improve operations on small arrays · 9bc73cd8
    Nobuyoshi Nakada authored
    [Feature #13884]
    
    Reduce number of memory allocations for "and", "or" and "diff"
    operations on small arrays
    
    Very often, arrays are used to filter parameters and to select
    interesting items from 2 collections and very often these
    collections are small enough, for example:
    
    ```ruby
    SAFE_COLUMNS = [:id, :title, :created_at]
    
    def columns
      @all_columns & SAFE_COLUMNS
    end
    ```
    
    In this patch, I got rid of unnecessary memory allocations for
    small arrays when "and", "or" and "diff" operations are performed.
    
    name             | HEAD  | PATCH
    -----------------+------:+------:
    array_small_and  | 0.615 | 0.263
    array_small_diff | 0.676 | 0.282
    array_small_or   | 0.953 | 0.463
    
    name             | PATCH
    -----------------+------:
    array_small_and  | 2.343
    array_small_diff | 2.392
    array_small_or   | 2.056
    
    name             | HEAD  | PATCH
    -----------------+------:+------:
    array_small_and  | 1.429 | 1.005
    array_small_diff | 1.493 | 0.878
    array_small_or   | 1.672 | 1.152
    
    name             | PATCH
    -----------------+------:
    array_small_and  | 1.422
    array_small_diff | 1.700
    array_small_or   | 1.452
    
    Author:    Dmitry Bochkarev <dimabochkarev@gmail.com>
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60057 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
    9bc73cd8
    array.c: improve operations on small arrays
    Nobuyoshi Nakada authored
    [Feature #13884]
    
    Reduce number of memory allocations for "and", "or" and "diff"
    operations on small arrays
    
    Very often, arrays are used to filter parameters and to select
    interesting items from 2 collections and very often these
    collections are small enough, for example:
    
    ```ruby
    SAFE_COLUMNS = [:id, :title, :created_at]
    
    def columns
      @all_columns & SAFE_COLUMNS
    end
    ```
    
    In this patch, I got rid of unnecessary memory allocations for
    small arrays when "and", "or" and "diff" operations are performed.
    
    name             | HEAD  | PATCH
    -----------------+------:+------:
    array_small_and  | 0.615 | 0.263
    array_small_diff | 0.676 | 0.282
    array_small_or   | 0.953 | 0.463
    
    name             | PATCH
    -----------------+------:
    array_small_and  | 2.343
    array_small_diff | 2.392
    array_small_or   | 2.056
    
    name             | HEAD  | PATCH
    -----------------+------:+------:
    array_small_and  | 1.429 | 1.005
    array_small_diff | 1.493 | 0.878
    array_small_or   | 1.672 | 1.152
    
    name             | PATCH
    -----------------+------:
    array_small_and  | 1.422
    array_small_diff | 1.700
    array_small_or   | 1.452
    
    Author:    Dmitry Bochkarev <dimabochkarev@gmail.com>
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60057 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Loading