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

Reply via email to