Supposons qu'il existe deux threads qui communiquent en s'envoyant des messages de données de manière asynchrone. Chaque thread a une sorte de file d'attente de messages.
Ma question est de très bas niveau: quel peut être le moyen le plus efficace de gérer la mémoire? Je peux penser à plusieurs solutions:
- L'expéditeur crée l'objet via
new
. Le récepteur appelledelete
. - Pool de mémoire (pour retransférer la mémoire à l'expéditeur)
- Collecte des ordures (par exemple, Boehm GC)
- (si les objets sont suffisamment petits) copier par valeur pour éviter l'allocation complète du tas
1) est la solution la plus évidente, je vais donc l'utiliser pour un prototype. Il y a de fortes chances qu'il soit déjà assez bon. Mais indépendamment de mon problème spécifique, je me demande quelle technique est la plus prometteuse si vous optimisez les performances.
Je m'attendrais à ce que la mise en commun soit théoriquement la meilleure, surtout parce que vous pouvez utiliser des connaissances supplémentaires sur le flux d'informations entre les threads. Cependant, je crains que ce soit aussi le plus difficile à réussir. Beaucoup de réglages ... :-(
La récupération de place devrait être assez facile à ajouter par la suite (après la solution 1), et je m'attendrais à ce qu'elle fonctionne très bien. Donc, je suppose que c'est la solution la plus pratique si 1) se révèle trop inefficace.
Si les objets sont petits et simples, la copie par valeur peut être la plus rapide. Cependant, je crains que cela n'impose des limitations inutiles à la mise en œuvre des messages pris en charge, donc je veux l'éviter.