Heap management

Giorgos Keramidas keramida at ceid.upatras.gr
Fri Oct 27 16:36:28 EEST 2006


On 2006-10-27 16:26, V13 <v13 at priest.com> wrote:
>On Friday 27 October 2006 16:02, Giorgos Keramidas wrote:
>> Συγγνώμη, αλλά δε λέει τίποτα αυτό.  Για να είσαι σίγουρος ότι όντως
>> αυτό συμβαίνει πρέπει να δοκιμάσεις με κάτι σαν:
>>
>>     #define BLKMINSIZE  32
>>     #define BLKSTEPSIZE	32
>>     #define BLKMAXSIZE	((size_t)4 * 1024 * 1024)
>>
>>     #define NALLOCMIN   32
>>     #define NALLOCSTEP  32
>>     #define NALLOCMAX   ((size_t)8192)
>>
>>     for (bsize = BLKMINSIZE; bsize <= BLKMAXSIZE; bsize += BLKSTEPSIZE) {
>>         for (nblks = NALLOCMIN; nblks <= NALLOCMAX; nblks += NALLOCSTEP) {
>>             runtest(bsize, nblks);
>>         }
>>     }
>>
>> Όπου η runtest() τρέχει ένα ξεχωριστό process, και κάνει κάτι σαν:
>>
>>     [1] Βρίσκει το αρχικό virtual size (α)
>>     [2] Κάνει malloc() `nblks' blocks των `bsize' bytes
>>     [3] Βρίσκει το νέο virtual size (β)
>>     [4] Κάνει free() όλα τα blocks
>>     [5] Βρίσκει το τελικό virtual size (γ)
>>     [6] Επιστρέφει (ή τυπώνει) τα:
>>         (bsize, nblks, α, β, γ)
> 
> Akribos gia ayto to logo esteila ayto poy esteila. Ta endiamesa pause
> ta ebala gia na mporeis na deis th mnimi kai ta #defines gia na
> mporeis na ta metabaleis. Epithdes ebala pola mikra blocks oste na
> pame sth xeiroteri periptosi. Sta megala einai sigoyro oti kanei
> mmap() (symfona me to documentation panta), opote den nomizo pos
> tithetai thema amfibolias.

Το να κάνεις free() με `χρόνο ζωής' του block όμως 5 δευτερόλεπτα, και ο
χρόνος ζωής των blocks να είναι της μορφής:

    BLK  LIFETIME
    0    xxxxx
    1      xxxxx
    2          xxxxx

Μπορεί να μην είναι τόσο 'πραγματικό' σενάριο.  Το μέγεθος των `μικρών
blocks' και ο τρόπος με τον οποίο ο allocator χωρίζει τις mmap'ed
περιοχές σε μικρότερα blocks, σε συνδυασμό και με το χρόνο ζωής του κάθε
μικρού block δεν είναι τόσο εύκολο να δοκιμαστούν, δυστυχώς.

Το βασικό πρόβλημα με τα malloc() tests είναι ότι τα 'αληθινά'
προγράμματα, έχουν πολύ διαφορετική συμπεριφορά σε χρόνο & χώρο από ότι
τα καασκευασμένα tests που μπορύμε να φανταστούμε συνήθως :(




More information about the Linux-greek-users mailing list