Project

General

Profile

Bug #15151

String#slice!(0,..) creates a duplicate of original string

Added by chopraanmol1 (Anmol Chopra) 7 months ago. Updated 5 months ago.

Status:
Open
Priority:
Normal
Assignee:
-
Target version:
-
ruby -v:
ruby 2.6.0dev (2018-09-23 trunk 64815) [x86_64-linux]
[ruby-core:89137]

Description

String#slice! when used at beginning of string (e.g. slice!(0,10)) calls rb_str_drop_bytes which creates shared string for non embedded string. str_modify_keep_cr clears the flag of shared string which is called before rb_str_drop_bytes. Due to which while calling slice! multiple time on same string creates multiple duplicate string.

Patch:

https://github.com/ruby/ruby/pull/1961

Comparison:
trunk:

Total allocated: 141116188 bytes (11250 objects)

  0.048000   0.000000   0.048000 (  0.045974)

patch:

Total allocated: 300080 bytes (7502 objects)

  0.016000   0.004000   0.020000 (  0.017376)

Files

bench_slice_bang.rb (412 Bytes) bench_slice_bang.rb chopraanmol1 (Anmol Chopra), 09/23/2018 03:32 PM

History

#1

Updated by chopraanmol1 (Anmol Chopra) 7 months ago

  • Description updated (diff)
#2

Updated by chopraanmol1 (Anmol Chopra) 7 months ago

  • Description updated (diff)
#3

Updated by chopraanmol1 (Anmol Chopra) 7 months ago

Updated by chopraanmol1 (Anmol Chopra) 7 months ago

nobu (Nobuyoshi Nakada) can you look into this? Thank you.

Also available in: Atom PDF