elmo-users
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elmo-users] Alokacja pamiêci.


From: rzyjontko
Subject: [elmo-users] Alokacja pamiêci.
Date: Mon, 14 Apr 2003 16:22:49 -0000
User-agent: elmo/0.6

Jest taki jeden problem, który nie daje mi spokoju.  Odnoszę wrażenie,
że największym overheadem w elmo jest właśnie ta część programu.
Wyjaśnię problem to może doradzicie mi jak sobie z nim poradzić.

Kiedy elmo musi zaalokować pamięć:
 - Podczas wczytywania poczty trzeba skopiować różne dane każdego
   listu (np temat, dane adresata i wiele innych)
 - Podczas umieszczania wpisu w tablicach hashujących (klucz jest
   kopią, dzięki temu wiadomo kto odpowiada za zwolnienie tej
   pamięci). 

90% tej pamięci to są kopie łańcuchów (xstrdup), reszta to pamięć
alokowana przez mime do kodowania/dekodowania załączników i bufory
modułów sieciowych.

Oto znane mi strategie alokowania pamięci:
 - Dla każdego stringa, którego chcemy mieć kopię wywołujemy strdup
   (który tak na prawdę wywołuje malloca, a potem kopiuje stringa).
 - Mieć swój moduł alokujący pamięć (coś jak bytechunk w gnu libc).
 - Pisać do pamięci dopóki się da i zadeklarować signalhandler dla
   segfault, który zaalokuje następną porcję pamięci.

Pierwsza strategia ma tą wadę, że dla każdego z tych stringów trzeba
wywołać free.  Druga będzie zawsze albo alokowała za dużo pamięci,
albo będzie musiała robić realloca, co będzie powodowało (być może
częste) kopiowanie pamięci.  Trzecia strategia chyba uniemożliwia
debuggowanie błędów związanych z pamięcią, choć jest niewątpliwie
najszybsza.

Myślałem o tym, żeby na razie wypróbować to podejście jedynie w
tablicach hashujących, obejrzeć jak to działa, a potem może
przedefiniować xstrdup, a może nawet pozostałe funkcje z xmalloc.c?

----                                ----
rzyjontko         <rzyj # plusnet () pl>
http://www.student.ii.uni.wroc.pl/~rzyj/
----                                ----






reply via email to

[Prev in Thread] Current Thread [Next in Thread]