Article View: pl.comp.lang.asm
Article #2596Re: [1/3 NTG] C - Optymalizacje wstawkami
From: DMR
Date: Tue, 12 Feb 2019 23:07
Date: Tue, 12 Feb 2019 23:07
51 lines
3760 bytes
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-mailReferences:
<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