Forum Webscript.Ru
Программирование => Perl => Тема начата: awayka от 07 Апреля 2006, 12:25:56
-
@imgData = unpack("C[$arraySize]",$temp);
#@imgData = split //,$temp;
<< недостаточно быстрые функции.
Может подскажете как это в inline C сделать или иначе?
-
а зачем?
-
А есть разница? Нужно и все.
Вот так, кстати тоже столько же времени.
void myunpack(char *str, int n)
{
int i;
Inline_Stack_Vars;
Inline_Stack_Reset;
for( i = 1; i < n; i++ )
Inline_Stack_Push(sv_2mortal(newSViv(0)));
Inline_Stack_Done;
}
-
потому как не получится быстрее, главная задежка на создании новой sv и запихивании ее в массив.
-
быстрее чем встроенная функция unpack - у тебя не получится это сделать, тем облее подключая внешние модули типа Inline::C.
Ведь Perl написан на С.
На асме конечно можешь попробовать, но не факт что выйдет быстрее.
-
Во-первых, даже так получается быстрее!
Во-вторых, cr4ck3r открыл мне глаза просто. Я-то думал, что Perl на Перле написан. Проблема-то не в этом. А в том, что unpack слишком общая функция.
И простая сумма времен вычислений :
void myunpack(char *str, int n)
{
int a;
for(int i = 0; i < n; i++ ) a=str;
}
и
for(int $i=0; $i<$n; $i++) { my $a=0; @imgData[$i]=$a; }
получается значительно меньше чем unpack.
Однако объединить данные две штуки - та еще проблема.
-
>что unpack слишком общая функция.
согласен.