|
| Boehm's GC Fra : Jesper FA |
Dato : 26-11-01 20:31 |
|
Jeg koder lidt C til en sunmaskine[1], hvor jeg gerne ville bruge GC.
Problemet er bare at efter en vis aktivitet går det galt. En bt i gdb
giver...
#0 0x1be44 in GC_mark_from_mark_stack ()
#1 0x1b918 in GC_mark_some ()
#2 0x1ea98 in GC_stopped_mark ()
#3 0x1e78c in GC_maybe_gc ()
#4 0x1ea14 in GC_collect_a_little_inner ()
#5 0x1f354 in GC_allocobj ()
#6 0x1d3b0 in GC_generic_malloc_inner ()
#7 0x1d4b4 in GC_generic_malloc ()
#8 0x1d5d0 in GC_malloc ()
Det sker normalt efter lidt over 600.000 allokeringer og 13,5 MB. Med
incremental går det galt efter ca. 200.000/4,5 MB. Så vidt jeg kan se
passer det åbenbart med det første garbage run.. i hvert fald går det også
galt, hvis man laver et manuelt kald med GC_gcollect.
Bruger jeg normal malloc går det fint så langt som jeg har prøvet.. men
self. bare med et forfærdeligt leak.
Kan det have noget med pthread og signaler.. eller hvad kan der gå galt.
(Jeg har prøvet google, men det gav ikke rigtigt noget)
[1] Har prøvet under linux med samme kode og det giver samme fejl.
--
Jesper
| |
Claus Rasmussen (27-11-2001)
| Kommentar Fra : Claus Rasmussen |
Dato : 27-11-01 11:30 |
|
Jesper FA wrote:
> Jeg koder lidt C til en sunmaskine[1], hvor jeg gerne ville bruge GC.
> Problemet er bare at efter en vis aktivitet går det galt. En bt i gdb
> giver...
Jeg formoder at der ikke står "Boehm" i subjekt uden grund, selv om jeg
ikke kan se du omtaler det i selve postingen.
Hvis jeg var dig, ville jeg kigge lidt på Boehm's hjemmeside og evt.
være lidt konservativ med kompileren (hvilken bruger du for i øvrigt ?)
-Claus
| |
Jesper FA (27-11-2001)
| Kommentar Fra : Jesper FA |
Dato : 27-11-01 17:37 |
|
Claus Rasmussen wrote:
> Jesper FA wrote:
>
>> Jeg koder lidt C til en sunmaskine[1], hvor jeg gerne ville bruge GC.
>> Problemet er bare at efter en vis aktivitet går det galt. En bt i gdb
>> giver...
>
> Jeg formoder at der ikke står "Boehm" i subjekt uden grund, selv om jeg
> ikke kan se du omtaler det i selve postingen.
Der er vel ikke grund til at sige tingene flere gange..
> Hvis jeg var dig, ville jeg kigge lidt på Boehm's hjemmeside og evt.
Det har jeg self. også gjort, dog uden det har hjulpet mig med det problem.
> være lidt konservativ med kompileren (hvilken bruger du for i øvrigt ?)
gcc v. 2.95.2.
Med konservativ mener du mht. optimizer? På mit eget kode bruger jeg slet
ikke optimizer og GC'en bliver std. compileret med '-O'.
Jeg har nu prøvet at lave et lille program der 100 gange allokere en linket
liste med 1.000.000 elementer og hver gange til sidst bare smider ref til
den væk. Det virker fint. Ingen fejl og der bliver allokeret sammenlagt
800MB, men programmer har aldrig mere end 30 MB på en gang. Så for simple
linkede lister virker det fint. Gad vide om vores datastruktur så er for
kompliceret til den kan finde ud af det.... men det skulle man jo ikke
synes var muligt (medmindre der er fejl i programmet[1]). Den laver bare
simpel grafgennemløb med pointer(al data) som kanter.
[1] Det er der jo altid, men den GC lader til at være rimeligt meget brugt,
så man skulle jo synes den virkede nogenlunde.
--
Jesper
| |
|
|