🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.asm
Article #2596

Re: [1/3 NTG] C - Optymalizacje wstawkami

#2596
From: DMR
Date: Tue, 12 Feb 2019 23:07
51 lines
3760 bytes
> Fakt, funkcja powinna się zatrzymać po ostatnim rozpoznanym znaku.
> Masz jakiś minimalistyczny kod, którym można odtworzyć problem, wraz z
> parametrami, które problem generują?


O kodzie nie ma co dyskutować:

char *cBuffer;    // wskazuje na zaalokowaną pamięć (new / malloc() / lub
                  // windowsowe HeapAlloc()) z zassanym plikiem tekstowym
char *cptr, *endptr;
double fValue;

    cptr = cBuffer;
    while (*cptr < '!')    // przeskocz białe znaki
        cptr++;
	  
    fValue = strtod(cptr, &endptr);

    cptr = endptr;
   
I tak dalej.
   
Natomiast same "parametry" potrafią ważyć kilkadziesiąt mega, i dlatego problem stał się... zauważalny - delikatnie rzecz ujmując.
Chodzi o to, że jeśli ciąg znaków reprezentujący liczbę całkowitą/zmiennoprzecinkową znajdzie się na początku "długiego" bufora znaków, to czas odczytu funkcją strtol/strtod robi się SKANDALICZNIE długi.
Dla bufora o długości kilku megabajtów to są już prawie setne sekundy - to razy te megabajty liczb powoduje totalne zawieszenie programu z CPU wykręconym na 100%.
Zacząłem kombinować i okazało się, że wstawienie "\0" zaraz za cyferkami rozwiązuje problem - ale mnie to, niestety, absolutnie nie satysfakcjonuje...

Co ciekawe - myślałem, że to może team GCC coś tam "poprawił", podpiąłem więc do C::B swego czasu kozacki kompilator MS Visual C++ Toolkit 2003 - to samo.



> Funkcja nie jest zrypana z punktu widzenia jej użyteczności w
> ogólnych zastosowaniach.


Jest zrypana z punktu widzenia logiki funkcjonowania, a to wystarczy.



> Twoje dane nie pasują do tej akurat funkcji, więc trzeba coś zrobić -
> albo pogmerać trochę w danych tak, aby działały funkcje standardowe,
> albo zrobić swoje funkcje, lepiej pasujące do danych. Generalnie to
> drugie rozwiązanie pewnie będzie lepsze i szybsze (chociażby przez to,
> że przez ciąg bajtów przejdzie tylko raz). Nie mówiąc o "wartości
> edukacyjnej" :)


A co ja właśnie robię...? :D

Ale tak to już jest - zaczynasz rozwiązywać jeden problem i... zaraz pojawia się kolejka następnych.
Może to kwestia nastawienia...? :D
Technical Details
Message-ID: <1703e748-bbfe-46e9-aa03-8a188a5e1224@googlegroups.com>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit0.net!weretis.net!feeder7.news.weretis.net!proxad.net!feeder1-2.proxad.net!209.85.166.216.MISMATCH!135no17115itl.0!news-out.google.com!f75ni8itf.0!nntp.google.com!1no17232itl.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
References: <30292520-12bd-49f0-b5ce-39c9af378a4c@googlegroups.com> <5c5b41d7$0$501$65785112@news.neostrada.pl> <781a3ad8-10bb-42aa-939f-dc6c11efa783@googlegroups.com> <5c5df439$0$476$65785112@news.neostrada.pl> <0f221c6c-4754-475f-a906-373a1fba35db@googlegroups.com> <5c632b27$0$488$65785112@news.neostrada.pl>

Show Full Headers
Complete Article Headers
X-Received: by 2002:a02:a899:: with SMTP id l25mr3733196jam.5.1550012845435;        Tue, 12 Feb 2019 15:07:25 -0800 (PST)
X-Received: by 2002:a9d:3476:: with SMTP id v109mr144832otb.7.1550012845168; Tue, 12 Feb 2019 15:07:25 -0800 (PST)
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit0.net!weretis.net!feeder7.news.weretis.net!proxad.net!feeder1-2.proxad.net!209.85.166.216.MISMATCH!135no17115itl.0!news-out.google.com!f75ni8itf.0!nntp.google.com!1no17232itl.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
Newsgroups: pl.comp.lang.asm
Date: Tue, 12 Feb 2019 15:07:24 -0800 (PST)
In-Reply-To: <5c632b27$0$488$65785112@news.neostrada.pl>
Complaints-To: groups-abuse@google.com
Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=80.238.104.22; posting-account=FE4hoAoAAADKg8EtnA4bEyQiJf7iqAgV
NNTP-Posting-Host: 80.238.104.22
References: <30292520-12bd-49f0-b5ce-39c9af378a4c@googlegroups.com> <5c5b41d7$0$501$65785112@news.neostrada.pl> <781a3ad8-10bb-42aa-939f-dc6c11efa783@googlegroups.com> <5c5df439$0$476$65785112@news.neostrada.pl> <0f221c6c-4754-475f-a906-373a1fba35db@googlegroups.com> <5c632b27$0$488$65785112@news.neostrada.pl>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <1703e748-bbfe-46e9-aa03-8a188a5e1224@googlegroups.com>
Subject: Re: [1/3 NTG] C - Optymalizacje wstawkami
From: DMR <mezzogm@gmail.com>
Injection-Date: Tue, 12 Feb 2019 23:07:25 +0000
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit