在开发过程中出现内存泄漏反复排查具体原因,终于定位到是因为vector操作不当引起内存泄漏,再次记录此次过程
struct FieldInfo {
std::string value;
std::vector<std::string> multi_value;
bool valid_discrete_feature_ = false;
FieldInfo() {
}
FieldInfo(std::string& single_value) : value(single_value) {
}
};
std::vector<FieldInfo> ad_fields(FLAGS_max_feature_count); (FLAGS_max_feature_count = 1024)
vector主要就是保存上面的结构体,上面结构体相对简单,主要是给value赋值,代码如下:
ad_fields[FIELD_INDUSTRY_LEVEL1_ID].value = location_result.industry_level1_id;
(直接使用ad_fields位置 直接赋值给其内部结构体value)
ad_fields向量需要循环引用赋值(具体是业务需要对ad级别特征不断填充、覆盖)
每次对ad_fields填充前进行了clear()操作。
定位到内存泄漏在
ad_fields[FIELD_INDUSTRY_LEVEL1_ID].value = location_result.industry_level1_id;
字符