Gasper Fele - Zorz wrote:
>
> Rad bi napisal programcek, ki bi mi pocel sledece:
> 1. prebral 2 short integerja.
> 2. vsak short int pomnozil s konstanto in delil s 100
> 3. izpisal nova short integerja.
>
> Integerja sta pri tem preprosto 2 unsigned characterja
> (dobljena z mpg123 -s).
>
> Problem ni napisati tak program, problem je napisati cim hitrejsi
> program.
> Trenutno za branje uporabljam getchar, za pisanje pa fwrite.
> Cudno je dejstvo, da moj program pozre vec procesorskega casa od
> mpg123. Kako naj torej naredim svoj program hitrejsi ? s cim naj
> berem? Bi mogoce lahko zadevo izvajal kako drugace kot v
> for(;!feof(stdin);) zanki ?
>
> Hvala vnaprej!
Procesorski cas verjetno zre pogosto preverjanje feof(stdin) --- zato
namesto getchar() raje uporabi buffer in s fread() beri po vec znakov
naenkrat. Prilozil sem kratek programcek, ki to pocne (upam da sem prav
razumel, kaj naj bi tvoj program pocel). In ne pozabi prevajat z -O3 :)
Upam da bo pomagalo.
LP, Ziga
#include <stdlib.h>
#include <stdio.h>
#define BUFFER_SIZE 10000
int main()
{
unsigned short *buffer;
int i, num_read;
double mult=5.0/100;
buffer=(unsigned short*)malloc(sizeof(unsigned short)*BUFFER_SIZE);
while (!feof(stdin)) {
num_read=fread(buffer, sizeof(unsigned short), BUFFER_SIZE, stdin);
for (i=0; i<num_read; i++)
buffer[i]*=mult;
fwrite(buffer, sizeof(unsigned short), num_read, stdout);
}
return (0);
}