作为一名高级工程师使用C++中STL容器优化下列函数使时间复杂度最低typedef struct uint32_t old_func; 这里包含基准地址 uint32_t new_func; uint32_t count; vectoruint32_t old_pos_v; 此处不包含基准地址 vectoruint32_t new_
使用C++中的STL容器可以优化上述函数的时间复杂度。可以使用一个map来存储无效的跳转信息,其中键为old_func,值为addr_map_t结构体。
具体优化步骤如下:
- 将m_vec_invalid_func_addr更改为std::map<uint32_t, addr_map_t> m_invalid_func_addr。
- 将for循环替换为对m_invalid_func_addr进行查找。
- 如果找到了对应的old_func,更新count、old_pos_v和new_pos_v。
- 如果未找到对应的old_func,创建一个新的addr_map_t结构体并插入到m_invalid_func_addr中。
优化后的代码如下所示:
typedef struct { uint32_t old_func; /这里包含基准地址/ uint32_t new_func; uint32_t count; vector<uint32_t> old_pos_v; /此处不包含基准地址/ vector<uint32_t> new_pos_v; /此处不包含基准地址/ } addr_map_t;
std::map<uint32_t, addr_map_t> m_invalid_func_addr; /保存无效的跳转信息/
int save_invalid_func(uint32_t func0, uint32_t pos0, uint32_t pos1) { auto it = m_invalid_func_addr.find(func0); if (it != m_invalid_func_addr.end()) { it->second.count++; it->second.old_pos_v.push_back(pos0); it->second.new_pos_v.push_back(pos1); return 0; }
addr_map_t st;
st.count = 1;
st.old_func = func0;
st.old_pos_v.push_back(pos0);
st.new_pos_v.push_back(pos1);
m_invalid_func_addr.insert(std::make_pair(func0, st));
return 1;
原文地址: https://www.cveoy.top/t/topic/iRQv 著作权归作者所有。请勿转载和采集!