Je cherche des idées pour un gestionnaire de tas pour gérer une situation très spécifique: Beaucoup et beaucoup de très petites allocations, allant de 12 à 64 octets chacune. Quelque chose de plus gros, je vais passer au gestionnaire de tas régulier, donc seulement des blocs minuscules doivent être pris en compte. Seul l'alignement à 4 octets est nécessaire.Gestionnaire de tas efficace pour la grosse baratte, allocs minuscules?
Mes principales préoccupations sont
- Frais généraux. Le tas libc normal arrondit généralement une allocation à un multiple de 16 octets, puis ajoute un autre en-tête de 16 octets - cela signifie plus de 50% de surcharge sur une allocation de 20 octets, ce qui est nul.
- Performance
Un aspect utile est que Lua (qui est l'utilisateur de ce tas) vous indiquera la taille du bloc, il est libérant quand il appelle libre() - cela peut permettre à certains OPTIMISATIONS.
Je vais poster mon approche actuelle, ce qui fonctionne bien, mais je voudrais améliorer si possible. Des idées?
Oui. J'irais probablement aussi bas que 4-byte granularity, mais cela ressemble à ce dont j'ai besoin. Donc, cela pourrait être fait avec des blocs entièrement sans entête, non? – Menkboy
Oui, aucun en-tête n'est nécessaire. Un bloc alloué n'a pas besoin d'en-tête, et un bloc libre n'a besoin que d'un pointeur vers le bloc libre suivant. –
Sucré. Je suppose que le GCing pour récupérer de la mémoire serait mal à la tête, mais je verrai si je peux m'en sortir en évitant cela, ou peut-être essayer de le faire progressivement. – Menkboy