[#28687] [Bug #2973] rb_bug - Segmentation fault - error.c:213 — rudolf gavlas <redmine@...>

Bug #2973: rb_bug - Segmentation fault - error.c:213

10 messages 2010/03/16

[#28735] [Bug #2982] Ruby tries to link with both openssl and readline — Lucas Nussbaum <redmine@...>

Bug #2982: Ruby tries to link with both openssl and readline

16 messages 2010/03/18

[#28736] [Bug #2983] Ruby (GPLv2 only) tries to link to with readline (now GPLv3) — Lucas Nussbaum <redmine@...>

Bug #2983: Ruby (GPLv2 only) tries to link to with readline (now GPLv3)

10 messages 2010/03/18

[#28907] [Bug #3000] Open SSL Segfaults — Christian Höltje <redmine@...>

Bug #3000: Open SSL Segfaults

19 messages 2010/03/23

[#28924] [Bug #3005] Ruby core dump - [BUG] rb_sys_fail() - errno == 0 — Sebastian YEPES <redmine@...>

Bug #3005: Ruby core dump - [BUG] rb_sys_fail() - errno == 0

10 messages 2010/03/24

[#28954] [Feature #3010] slow require gems in ruby 1.9.1 — Miao Jiang <redmine@...>

Feature #3010: slow require gems in ruby 1.9.1

15 messages 2010/03/24

[#29179] [Bug #3071] Convert rubygems and rdoc to use psych — Aaron Patterson <redmine@...>

Bug #3071: Convert rubygems and rdoc to use psych

10 messages 2010/03/31

[ruby-core:28539] Re: [Feature #905] Add String.new(fixnum) to preallocate large buffer

From: Yusuke ENDOH <mame@...>
Date: 2010-03-06 20:44:02 UTC
List: ruby-core #28539
Hi,

2010/3/6 Kornelius Kalnbach <redmine@ruby-lang.org>:
> Here's a patch that doesn't work. I don't know what I'm doing wrong here: RESIZE_CAPA seemed just right.

Thank you for your writing a patch!
It seems to work on my environment.  What made you think it does
not work?


I confirmed it by the following program:

  opt = false
  s = ""
  t = "x" * 1_000_000
  s.buffer(100_000_000) if opt
  100.times { s << t }
  p s.size

The above program takes 0.205 sec. when opt is false, and takes
0.195 sec. when opt is true.


But this is artificial example with very big string (1 GB).
The following more realistic case (with 100 KB):

  opt = false
  1000.times do
    s = ""
    s.buffer(opt ? 100_001 : 100)
    x = "x" * 1000
    100.times { s << x }
  end

takes 0.115 sec. when opt is false, 0.130 sec. when opt is true.
I don't know why it becomes slower, but the story seems not to be
so simple.


Anyway, the overhead of concatenation seems not so big.  I doubt
if it is the bottleneck.

-- 
Yusuke ENDOH <mame@tsg.ne.jp>

In This Thread