2010-05-31 78 views
4

我幾乎陷入了一個我從來沒有得到答案的問題,這個問題解決了一個非常重要的問題;在boost :: asio上的memory fragmentation內存碎片@ boost :: asio?

沒有發現任何文件,也沒有在這裏。

在升壓:: ASIO異步功能,例如ASYNC_WRITE()& async_read_some()總是分配一些。 (在我的情況下,它是在VC9 Debug版本中分別爲144個字節)。

我怎麼知道它?
我將客戶端連接到此庫提供的「回顯服務器」示例。
我在「new new(size_t size)」代碼中的「new.cpp」處放置了一個斷點。
然後我發送「123」。斷點被擊中!
現在使用堆棧跟蹤我可以清楚地看到,「新」調用的根源自我在函數處理程序中調用的async_write()& async_read_some()調用。因此,內存碎片遲早會來,因此我無法使用ASIO,我希望我能!

我想說明的是,我知道異步操作至少在IOCP時需要在操作期間使用分配的結構,直到完成(調用處理程序時)。
例如對於IOCP,您必須爲每個操作(讀/寫)設置一個OVERLAPPED結構。
我懷疑這是我有上述小分配的原因,他們擔心我內存碎片。
然後,我該如何彙集這些結構?平臺無關當然。

有什麼想法?任何有用的代碼示例?我相信你們中有些人已經解決了這個問題。

回答

2

聽起來你需要使用asio自定義內存分配功能,你有沒有讀過documentation?還有一個相當簡單的example

+0

我已閱讀文檔,但對我來說有點複雜。我想我還沒有努力,而這正是我即將要做的。我感謝你的回覆! – Poni 2010-06-09 20:49:07