使用 C++ 中的 STL 容器可以优化上述函数的时间复杂度。可以使用一个 map 来存储无效的跳转信息,其中键为 old_func,值为 addr_map_t 结构体。\n\n具体优化步骤如下:\n1. 将 m_vec_invalid_func_addr 更改为 std::map<uint32_t, addr_map_t> m_invalid_func_addr。\n2. 将 for 循环替换为对 m_invalid_func_addr 进行查找。\n3. 如果找到了对应的 old_func,更新 count、old_pos_v 和 new_pos_v。\n4. 如果未找到对应的 old_func,创建一个新的 addr_map_t 结构体并插入到 m_invalid_func_addr 中。\n\n优化后的代码如下所示:\n\ncpp\ntypedef struct \n{\n uint32_t old_func; /*这里包含基准地址*/\n uint32_t new_func; \n uint32_t count; \n vector<uint32_t> old_pos_v; /*此处不包含基准地址*/\n vector<uint32_t> new_pos_v; /*此处不包含基准地址*/\n} addr_map_t;\n\nstd::map<uint32_t, addr_map_t> m_invalid_func_addr; /*保存无效的跳转信息*/\n\nint save_invalid_func(uint32_t func0, uint32_t pos0, uint32_t pos1)\n{\n auto it = m_invalid_func_addr.find(func0);\n if (it != m_invalid_func_addr.end()) \n {\n it->second.count++;\n it->second.old_pos_v.push_back(pos0);\n it->second.new_pos_v.push_back(pos1);\n return 0;\n }\n\n addr_map_t st; \n st.count = 1; \n st.old_func = func0; \n st.old_pos_v.push_back(pos0); \n st.new_pos_v.push_back(pos1); \n m_invalid_func_addr.insert(std::make_pair(func0, st));\n\n return 1;\n}\n

C++ STL 容器优化:使用 map 提高函数时间复杂度

原文地址: https://www.cveoy.top/t/topic/qxP7 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录