Фрагментация памяти повышение:: asio?

Я в значительной степени застреваю с вопросом, я никогда не получал ответ для, вопрос, который решает чрезвычайно важную проблему; фрагментация памяти при повышении:: asio.

Найденный ничем в документации, ни здесь в ТАК.

Асинхронные функции при повышении:: asio, например, async_write () и async_read_some () всегда выделяют что-то. (в моем случае это - 144 и 96 байтов соответственно в Отладочной сборке VC9).

Как я знаю об этом?
Я подключаю клиент к "примеру" сервера эха, которому предоставляют эту библиотеку.
Я поместил точку останова в "new.cpp" в коде "нового оператора (size_t размер)".
Затем я отправляю "123". Точка останова поражена!
Теперь с помощью отслеживания стека я могу ясно видеть, что корень к "новому" вызову прибывает из async_write () и async_read_some () вызовы, которые я выполняю в функциональных обработчиках.

Таким образом, фрагментация памяти произойдет рано или поздно, таким образом я не могу использовать ASIO, и мне жаль, что я не мог!

Я хочу отметить, что я понимаю, что асинхронная операция требует, по крайней мере, в IOCP, выделенная структура, которая будет использоваться во время операции до завершения (когда обработчик называют).
Например, с IOCP у Вас должна быть ПЕРЕКРЫТАЯ структура для каждой операции (чтение-запись).
Я подозреваю, что это - причина, что у меня есть вышеупомянутые маленькие выделения, кто волнует меня по поводу фрагментации памяти.
Как я объединяю эти strctures затем? Платформенно независимый, конечно.

Какая-либо идея? Какой-либо полезный пример кода? Я уверен, что некоторые из Вас уже решили эту проблему.

5
задан rcollyer 8 June 2010 в 18:17
поделиться

1 ответ

Похоже, вам нужно использовать возможности пользовательского распределения памяти asio, вы читали документацию? Там также есть довольно простой пример.

3
ответ дан 15 December 2019 в 06:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: