我有一個真正的內存泄漏源於以下功能。std :: wstring_convert內存泄漏
// Convert a UTF-8-encoded byte string to a wstring.
std::wstring Utf8ToWideString(const std::string& utf8str) {
std::wstring_convert<std::codecvt_utf8<wchar_t>, wchar_t> conv;
return conv.from_bytes(utf8str);
}
據我所知,設置特定的功能可能每個線程一次分配一些存儲器,並保持它的線程的生命週期或甚至整個過程(如顯然happens here)。這是不是我的情況;實際上,在這個過程中,我擁有大約2GB的額外內存,並且這些顯然泄露的堆塊中的大多數都有兩種大小之一,並且每個大小都包含一個星期的一天(...:Mon:Monday:Thu:...
)和另一個一些時間格式。這些顯然是每次通話都泄漏。根據WPA(工具跟蹤分配,valgrind的Windows-land表親)的分配,發生在調用CRT功能std::setlocale
的內部。另外,線程並不是很大,如果不是所有的轉換調用都來自同一個線程池,絕大多數線程都是絕對多數。
我的主要問題是:我正確使用std::wstring_convert
?
第二個問題,如果在我的代碼中沒有明顯的錯誤或不常見的模式,這是一個已知問題?我的編譯器是MSVS 2015,並且同時出現Update 2和Update 3版本的問題。
感謝您確認我的代碼片段的完整性。我一定會努力提出最低限度的複製;目前,這個問題發生在一個使用多達10個不同工具集的庫中的巨大服務器上。並且泄漏無疑是太重要了,無法成爲任何類型的緩存(我們正在談論每天處理的* GB內存)。 – kkm