[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