Article View: pl.comp.os.linux.programowanie
Article #227Re: perl - banalny problem?
From: Piotr Woszczynski
Date: Mon, 13 Sep 1999 05:49
Date: Mon, 13 Sep 1999 05:49
52 lines
3288 bytes
3288 bytes
Bartosz Jakubski napisał:
>
> Piotr Woszczynski napisał(a):
^^^ - hmmm!!!??? :-))
>
> [...]
> >itd.
> RTFM! :-)
> man perlfaq4
> perldoc perlfaq4
Dzięki za podpowied :-)
Tylko ze ten tego wychodzi ze perl nie radzi sobie z liczbami
zmiennoprzecinkowymi (a w kazdym razie to ja sobie nie radze...).
Obszedlem ten problem baaaaardzo lopatologicznie. Warosci ulamkowe
przemnozylem przez odpowiednia liczbe (10, 100, 1000 itp) tak by
otrzymac liczbe calkowita. Natrafilem na nastepna bariere...
W czym rzecz? Wymyslilem sobie programik ktory zamienialby trójki liczb
x, y, z na tablicę (macierz) tak skonstruowanš by wspolrzedne x i y
zamienione zostaly na odpowiedni nr. wiersza i kolumny, na przecięciu
których wpisywana bylaby wartosc z, w "puste" miejsca wprowadzana
wartosc "0". Dane wejsciowe zacišgane sš z pliku, w którym definiowany
jest też rozmiar macierzy poprzez wartosc minimalnš i maxymalnš x, y,
najmniejszš podziałkę na osiach x i y. Jak sš ułamkowe to przemnażane sš
przez odpowiedni mnożnik i zapisywane do pliku tymczasowego - po to by
się pozbyć liczb zmiennoprzecinkowych (bardzo to nieleganckie, ale
cóż..). Następnie otwierany jest plik temp, inicjowana tablica @t na
podstawie min, max x i y oraz dx i dy, do której na wstępie wprowadzone
sš wartosci 0. Następnie wyszukiwane sš nr wiersza i kolumny, na
podstawie których jest wyliczany indeks dla z-ta w tablicy @t i
przypisywana wartosc $t[$index]=$z[$i]. Cala tablica wprowadzana jest do
pliku w ten sposob, ze jak osiagnieta jest maxymalna wartosc liczby
kolumn (wczesniej wyliczona) wstawiany jest "\n" i leci następny wiersz.
Byłoby wszystko OK, bo to działa, tylko jedno mnie niepokoi ze w trakcie
samego zapisu odpalony proces potrafi w pamięci (obserwowany pod top-em)
urosnšc do 200MB i wywalic sie z braku pamięci (mam przy starcie procesu
~70MB wolnego RAM-u i ~100MB wolnego swapu), czy jest mozliwe jakies
odchudzenie tego procesu? Czemu sam zapis do raz otwartego pliku jest
taki pamięciożerny? Zaznaczam ze "przejsciowe" tablice i zmienne po
wykorzystaniu traktuję instrukcjš undef, tak ze w końcu istnieje
(powinna istnieć) tylko jedna tablica (nie powiem ze mała ok. miliona
$t[$i]), którš własnie zapisuję do pliku. Przy parametrach
"podprogowych" tzn jak się jeszcze miesci w pamięci otrzymuje raptem
2-3MB danych w pliku końcowym...
Co jest powodem wzrostu objętosci? Sorry za pewnie dosyć naiwne pytanie,
ale przekopałem cała ksišżkę "Programowanie w Perlu" L.Walla i psińco
nic nie wydedukowałem.
Pozdrawiam
Piotr
Technical Details
Message-ID:
<37DC906C.6E3D6F9F@icso.com.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!mat.uni.torun.pl!news.nask.pl!uw.edu.pl!ict.pwr.wroc.pl!not-for-mailReferences:
<37D7467F.4FFB7171@icso.com.pl> <slrn7tf3qd.ho.migo@localhost.localdomain>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!mat.uni.torun.pl!news.nask.pl!uw.edu.pl!ict.pwr.wroc.pl!not-for-mail From: Piotr Woszczynski <woszcz@icso.com.pl> Newsgroups: pl.comp.os.linux.programowanie Subject: Re: perl - banalny problem? Date: Mon, 13 Sep 1999 07:49:32 +0200 Organization: ICSO Lines: 52 Message-ID: <37DC906C.6E3D6F9F@icso.com.pl> References: <37D7467F.4FFB7171@icso.com.pl> <slrn7tf3qd.ho.migo@localhost.localdomain> NNTP-Posting-Host: sbg66.icso.com.pl Mime-Version: 1.0 X-Mailer: Mozilla 4.07 [pl] (Win95; I) Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit