[Moscow.pm] XS как переименовать модуль?

Ruslan Zakirov ruz на bestpractical.com
Пн Янв 31 03:41:48 PST 2011


2011/1/31 Ivan Petrov <i.petro.77.00 на gmail.com>:
> Кстати поковырявшись с XS понял почему некоторые алгоритмы на перле работали
> очень медленно.
>
> например есть куча алгоритмов которые накапливают данные в скаляре
>
> sub что-то {
>    $scalar .= какие-то данные';
> }
>
> на уровне создания скаляров из C-шного кода можно скаляру заранее выделить
> определенное количество памяти и он не будет ее переаллоцировать на каждую
> итерацию цикла/каллбека.
>
> вопрос, а есть ли какой стандартный модуль, которым бы можно было потюнить
> используемое данным скаляром количество памяти?
> или скажем данным массивом?

$#array = 100;

Пример:

perl -MDevel::Peek -e 'my @a; Dump(\@a); push @a, (1)x100; Dump(\@a);
$#a = 1000; Dump(\@a);'
....
    REFCNT = 2
    FLAGS = (PADBUSY,PADMY)
...
    ARRAY = 0x0
    FILL = -1
    MAX = -1
    ARYLEN = 0x0
    FLAGS = (REAL)
...
    ARRAY = 0x100207930
    FILL = 99
    MAX = 125
....
    ARRAY = 0x100841e00
    FILL = 1000
    MAX = 2045

Обращаем внимание на FILL и MAX. Из неприятного массив заполняется
undef'ами до указаной длинны.

$str = 0x1000; $str = '';

perl -MDevel::Peek -e 'my $str; Dump($str); $str = 1x1000; $str = "";
Dump($str); $str.=1x99; Dump($str)'
SV = NULL(0x0) at 0x100801500
  REFCNT = 1
  FLAGS = (PADBUSY,PADMY)
...
  CUR = 0
  LEN = 1008
...
  CUR = 99
  LEN = 1008

Как-то так.

>
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
>
>



-- 
Best regards, Ruslan.


Подробная информация о списке рассылки Moscow-pm