From: matz@... (Yukihiro Matsumoto) Date: 2003-04-10T03:57:47+09:00 Subject: [ruby-dev:19985] Re: ""*n まつもと ゆきひろです In message "[ruby-dev:19984] Re: ""*n" on 03/04/10, Tadayoshi Funaba writes: |> if (len < 0) { |> rb_raise(rb_eArgError, "negative argument"); |> } |> if (LONG_MAX/len < RSTRING(str)->len) { |> rb_raise(rb_eArgError, "argument too big"); |> } |> |> のコストはほとんどゼロだと思うんですが。 | |いや、それは違います。無駄に感じるのは、その後にループがあるからです。 それを含めても 1 str2 = rb_str_new5(str,0, RSTRING(str)->len*len); 2 for (i=0; iptr+(i*RSTRING(str)->len), 4 RSTRING(str)->ptr, RSTRING(str)->len); 5 } 6 RSTRING(str2)->ptr[RSTRING(str2)->len] = '\0'; 7 8 OBJ_INFECT(str2, str); 9 10 return str2; 1でstrのdereference 2でi