我知道。 Xpressive在這裏可能(可能)沒有錯,但是我在尋找內存泄漏方面付出了很多努力,我不得不調整代碼佈局來修復出血。「壓力泄漏」固定,但不明白
有人可以向我解釋爲什麼佈局的改變修復了嗎?我不明白爲什麼(正確/改進)使用「靜態常量」來修復泄漏。
順便說一下,泄漏發生在MIPs核心上,使用boost版本1.49,並與GCC 4.3.3交叉編譯。
原始 「篩子」 代碼:
// source.cpp
#include <boost/...
cregex token = keep(+set[ alnum|'!'|'%'|'_'|'*'|'+'|'.'|'\''|'`'|'~'|'-']);
cregex more = ...
bool foo(const char * begin, const char * end, size_t& length, std::string& dest)
{
mark_tag name_t(1);
cregex regx = bos >>
icase("name:") >>
(name_t= token) >> eos;
cmatch what;
bool ok = regex_search(begin, end, what, regx);
...
return ok;
}
固定 「不露」 代碼:
// header.hpp
#include <boost/...
class Xpr {
public:
static const cregex token;
static const cregex more;
};
// source.cpp
#include "header.hpp"
const cregex Xpr::token = keep(+set[ alnum|'!'|'%'|'_'|'*'|'+'|'.'|'\''|'`'|'~'|'-']);
const cregex Xpr::more = ...
bool foo(const char * begin, const char * end, size_t& length, std::string& dest)
{
mark_tag name_t(1);
static const cregex regx = bos >>
icase("name:") >>
(name_t= Xpr::token) >> eos;
cmatch what;
bool ok = regex_search(begin, end, what, regx);
...
return ok;
}
泄漏似乎在富的每一個呼叫正在發生!
感謝您花時間做出迴應。如果我要發佈真實的代碼,我的僱主可能不會太感動,對不起。 經過進一步測試後發現,即使在函數「foo」中使用static const也不足以完全阻止泄漏。 但我沒有看到來自Xpr類靜態const成員(還)的任何泄漏。 我的猜測是邁向MIPS版本的GCC中的一些「流氓軟件」。我也**不能**重現「偏離目標」 – GreyMattR 2012-08-08 13:43:19