Автор Тема: Как перевести скаля в массив. Каждый элемент - байт. unpack - медленно.  (Прочитано 4040 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн awayka

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 3
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
@imgData = unpack("C[$arraySize]",$temp);
#@imgData = split //,$temp;

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

Может подскажете как это в inline C сделать или иначе?

Оффлайн arto

  • Ветеран
  • *****
  • Сообщений: 699
  • +0/-0
  • 2
    • Просмотр профиля

Оффлайн awayka

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 3
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
А есть разница? Нужно и все.

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

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;
}

Оффлайн arto

  • Ветеран
  • *****
  • Сообщений: 699
  • +0/-0
  • 2
    • Просмотр профиля
потому как не получится быстрее, главная задежка на создании новой sv и запихивании ее в массив.

Оффлайн cr4ck3r

  • Фанат Perl
  • Постоялец
  • ***
  • Сообщений: 146
  • +0/-0
  • 2
    • Просмотр профиля
    • http://perlmonks.org.ru
быстрее чем встроенная функция unpack - у тебя не получится это сделать, тем облее подключая внешние модули типа Inline::C.
Ведь Perl написан на С.
На асме конечно можешь попробовать, но не факт что выйдет быстрее.
Ворота в perl - perlmonks.org.ru

Оффлайн awayka

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 3
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Во-первых, даже так получается быстрее!
Во-вторых, 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.

Однако объединить данные две штуки - та еще проблема.

Оффлайн cr4ck3r

  • Фанат Perl
  • Постоялец
  • ***
  • Сообщений: 146
  • +0/-0
  • 2
    • Просмотр профиля
    • http://perlmonks.org.ru
>что unpack слишком общая функция.
согласен.
Ворота в perl - perlmonks.org.ru

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28