Forum Webscript.Ru

Программирование => Perl => Тема начата: awayka от 07 Апреля 2006, 12:25:56

Название: Как перевести скаля в массив. Каждый элемент - байт. unpack - медленно.
Отправлено: awayka от 07 Апреля 2006, 12:25:56
@imgData = unpack("C[$arraySize]",$temp);
#@imgData = split //,$temp;

<< недостаточно быстрые функции.

Может подскажете как это в inline C сделать или иначе?
Название: Как перевести скаля в массив. Каждый элемент - байт. unpack - медленно.
Отправлено: arto от 07 Апреля 2006, 12:39:21
а зачем?
Название: Как перевести скаля в массив. Каждый элемент - байт. unpack - медленно.
Отправлено: awayka от 07 Апреля 2006, 15:15:21
А есть разница? Нужно и все.

Вот так, кстати тоже столько же времени.

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;
}
Название: Как перевести скаля в массив. Каждый элемент - байт. unpack - медленно.
Отправлено: arto от 07 Апреля 2006, 15:23:54
потому как не получится быстрее, главная задежка на создании новой sv и запихивании ее в массив.
Название: Как перевести скаля в массив. Каждый элемент - байт. unpack - медленно.
Отправлено: cr4ck3r от 07 Апреля 2006, 15:24:08
быстрее чем встроенная функция unpack - у тебя не получится это сделать, тем облее подключая внешние модули типа Inline::C.
Ведь Perl написан на С.
На асме конечно можешь попробовать, но не факт что выйдет быстрее.
Название: Как перевести скаля в массив. Каждый элемент - байт. unpack - медленно.
Отправлено: awayka от 07 Апреля 2006, 17:29:31
Во-первых, даже так получается быстрее!
Во-вторых, 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 - медленно.
Отправлено: cr4ck3r от 10 Апреля 2006, 11:18:26
>что unpack слишком общая функция.
согласен.