Без копирования - никак, если вам нужно собрать в один буфер, а приходят из разных мест. Если заранее известен размер (либо есть оценка) - то можно попробовать выделить заранее все необходимое место, но это XSкой.

On 03/10/2015 08:27 PM, Andrey Kovbovich wrote:
Задача - приходят от I/O куски данных, и нужно их буферизировать перед обработкой. Вопрос как это сделать эффективно (идеально - без копирования).

10 марта 2015 г., 20:20 пользователь Dmitry Smal <[email protected] <mailto:[email protected]>> написал:

    А что у вас за задача такая ?
    Есть ооочень много конкатенаций подряд идет  (в цикле например) -
    то нужно оптимизировать сам алгоритм склейки.
    Если не нагружен - оставить более читаемый вариант =)


    On 03/10/2015 07:59 PM, Andrey Kovbovich wrote:
    Интересно, получается конкатенировать более чем в 2 раза быстрее
    последовательно (selfcat), а не разом ($z = $x . $y);

    Warstone, я писал про использование сабстр с параметром replace
    (4ый). А ты почему-то используешь в примерах 3х-арный вариант.

    2015-03-10 19:48 GMT+03:00 PEF Secure <[email protected]
    <mailto:[email protected]>>:

        On Tuesday, March 10, 2015 17:03:36 Andrey Kovbovich wrote:
        > Кто-нибудь знает, за счет чего substr быстрее?
        >
        > $ perl -MBenchmark=cmpthese
        >
        
-wE'my$x="0"x1_000_000;my$b="1"x100_000;cmpthese(10000,{concat=>sub{my$z=$x.
        >
        
$b;},substr=>sub{my$z="";substr$z,(length$z),(length$x),$x;substr$z,(length$
> z),(length$b),$b;},join=>sub{my$z=join("",$x,$b)}});' Rate join concat
        > substr
        > join   3922/s     --    -0%   -58%
        > concat 3937/s     0%     --   -57%
        > substr 9259/s   136%   135%     --

        selfcat => sub {my$z=$x; $z.=$b;}

        вот примерный аналог твоего substr

        --
        PEF Developer
        --
        Moscow.pm mailing list
        [email protected] <mailto:[email protected]> | http://moscow.pm.org






    --
    Moscow.pm mailing list
    [email protected] <mailto:[email protected]> | http://moscow.pm.org





-- 
Moscow.pm mailing list
[email protected] | http://moscow.pm.org

Ответить