2010-11-29 7 views
2

J'envisage d'utiliser boost::function dans ma mise en œuvre d'un gestionnaire de minuterie. Au temporisateur un boost::function sera passé et à l'expiration du temporisateur le rappel sera exécuté. Les heures seront programmées/annulées à une fréquence élevée (~ 1000 actions/s).boost :: utilisation de la mémoire de fonction

Mais je suis préoccupé par la quantité de mémoire tas boost::function peut utiliser.

Je sais par exemple que boost::asio utilise beaucoup boost::function, alors que les exigences de performance pour la librairie sont probablement très élevées.

Qu'en pensez-vous?

Répondre

3

Il est peu probable à mon avis que le surcoût de boost::function soit le facteur de déclenchement dans le code de gestion du temporisateur.

Obtenir la file d'attente, le verrouillage et la signalisation des threads d'attente corrects et efficaces est une bien meilleure utilisation de vos cycles cérébraux. Perversely, c'est un autre argument en faveur de boost::function ou similaire pour éviter les maux de tête avec des rappels «bruts».

2

boost :: function est un objet assez petit. Peut être tout de 2-3x la taille d'un pointeur de fonction normale, le cas échéant.

+0

Je ne suis pas préoccupé par la taille des données allouées, mais plutôt par les nouvelles/supprimer – dimba

+0

@dimba - vous devrez de toute façon 'new' quelque chose pour suivre les temporisations en attente, si vous faites attention à la mémoire des foncteurs être inclus dans cela ne peut-il pas? –

+0

@Steve Je ne suis pas sûr de comprendre ce que vous voulez dire. L'utilisateur aura une API comme ScheduleTimer (boost :: function <>, ...), donc boost :: function <> déjà allouée par l'utilisateur. Puis-je le faire différemment? J'utilise la 3ème librairie pour la gestion de minuterie (ACE) qui permet de stocker void * pour chaque minuteur actif, donc j'ai besoin de stocker le pointeur store sur boost :: function <>. Puis-je l'utiliser d'une manière ou d'une autre pour éviter l'allocation de mémoire? – dimba

2

Jetez un oeil à this article, pourrait vous donner une perspective.

Questions connexes