Je suis à peu près coincé avec une question à laquelle je n'ai jamais eu de réponse, une question qui traite d'un problème extrêmement important; memory fragmentation à boost :: asio.Fragmentation de la mémoire @ boost :: asio?
Rien trouvé dans la documentation ni ici chez SO.
Les fonctions async à boost :: asio, par exemple async_write() & async_read_some() allouent toujours quelque chose. (dans mon cas c'est 144 & 96 octets respectivement, dans la version Debug VC9).
Comment savoir?
Je connecte un client à l'exemple "serveur d'écho" fourni avec cette bibliothèque.
J'ai mis un point d'arrêt à "new.cpp" au code de "operator new (size_t size)".
Ensuite, j'envoie "123". Le point d'arrêt est atteint!
Maintenant, en utilisant la trace de la pile, je peux voir clairement que la racine du "nouvel" appel provient des appels async_write() & async_read_some() que je fais dans les gestionnaires de fonctions.
Donc la fragmentation de la mémoire viendra tôt ou tard, donc je ne peux pas utiliser ASIO, et j'aimerais pouvoir!
Je comprends que je comprends qu'une opération asynchrone nécessite, au moins à l'IOCP, une structure allouée à utiliser pendant l'opération, jusqu'à la fin (quand le gestionnaire est appelé).
Par exemple avec IOCP vous devez avoir une structure OVERLAPPED pour chaque opération (lecture/écriture).
Je soupçonne que c'est la raison pour laquelle j'ai les petites allocations ci-dessus, qui m'inquiète au sujet de la fragmentation de la mémoire.
Comment puis-je regrouper ces strctures alors? Plate-indépendant bien sûr.
Une idée? Un exemple de code utile? Je suis sûr que certains d'entre vous ont déjà résolu ce problème.
J'ai lu le document, mais c'est un peu compliqué pour moi. Je suppose que je n'ai pas essayé assez fort, et c'est exactement ce que je vais faire bientôt. Je vous remercie pour une réponse aimable! – Poni