Heap management

Giorgos Keramidas keramida at ceid.upatras.gr
Fri Jun 2 23:35:40 EEST 2006


On 2006-06-02 23:25, Apostolos Manolitzas <apostolix at gmail.com> wrote:
> On 6/2/06, Giorgos Keramidas <keramida at ceid.upatras.gr> wrote:
> >On 2006-06-02 21:21, Apostolos Manolitzas <apostolix at gmail.com> wrote:
> [snip]
> >> Καλησπέρα σε όλους,
> >>
> [/snip]
> 
> >Δε στο προτείνω σαν 'λύση', εκτός κι αν έχεις το χρόνο και τη
> >διάθεση να μετρήσεις πραγματικά αν αυτό είναι καλύτερο ή χειρότερο
> >από την προκαθορισμένη συμπεριφορά της GNU malloc().
>
> Νομίζεις οτι θα ήταν πιο αποτελεσματικό να δοκιμάσουμε μια λύση με
> δική μας υλοποίηση απο ένα pool ώστε να αποφύγουμε το overhead του
> malloc ??

Ανάλογα.  Σε πειράζει τόσο πολύ το overhead της malloc();

Οι system malloc() έχουν συνήθως βελτιστοποιήσεις για κάποια πράγματα,
όπως multi-threaded applications.  Αν φτιάξεις εσύ ένα δικό σου pool,
τότε για multi-threaded πράγματα θα πρέπει να χρησιμοποιήσεις ένα
"giant lock" για το pool, και το giant lock θα γίνει αφορμή για ένα
πανέμορφο bottleneck.

Αν από την άλλη, ξέρεις από πριν ότι θα χρειαστείς μόνο N ίδια
αντικείμενα, ίσως έχει νόημα αντί για:

	for (k = 0; k < number_of_objects; k++)
	    object[k] = malloc(sizeof(object[k]));

Να κάνεις κάτι σαν:

	pool = malloc(number_of_objects * sizeof(object[k]));

και να διαχειριστείς ως ένα μεγάλο blob τα objects.

Αυτό εξαρτάται από το τι ακριβώς πρέπει να κάνει το πρόγραμμά σου και
από τα αποτελέσματα των μετρήσεων που θα κάνεις.




More information about the Linux-greek-users mailing list