c++ - 使用 vector 时的内存管理

标签 c++ vector memory-management

我正在制作游戏引擎,需要为游戏中的所有组件和实体使用 std::vector 容器。

在脚本中,用户可能需要持有指向实体或组件的指针,也许是为了持续检查某种状态。如果向指针指向的 vector 添加了一些东西并且超出了容量,我的理解是 vector 将分配新的内存并且指向 vector 中任何元素的每个指针都将变得无效。

考虑到这个问题,我有几个可能的解决方案。在每次 push_back 到 vector 之后,检查当前容量变量是否超过 vector 的实际容量是否可行?如果是这样,获取并覆盖指向新指针的旧指针?这会保证在执行 push_back 时“捕获”所有使指针无效的情况吗?

我发现的另一种解决方案是将索引保存到元素并以这种方式访问​​它,但我怀疑当您需要连续检查该元素的状态时(每 1/60 秒),这对性能不利).

我知道其他容器没有这个问题,但我真的很想让它与 vector 一起工作。另外可能值得注意的是,我事先不知道会有多少实体/组件。

非常感谢任何输入。

最佳答案

当您每秒仅访问其元素 60 次时,您不必担心 std::vector 的性能。顺便说一句,在 Release 编译模式下,std::vector::operator[] 被转换为单个 lea 操作码。不过,在 Debug模式下,它会通过一些运行时范围检查进行修饰。

关于c++ - 使用 vector 时的内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45395032/

相关文章:

c++ - 如何在宿主程序调用 main() 函数之前构造 DLL 模块中的全局对象?

c++ - 与在 C++ 中返回 vector 的行为不一致

c++ - 如何检索 vector 中第一个找到的具有最低值的元素

c++ - 如何从链表中删除正确的元素?

c++ - ROS 节点无法通过启动文件执行工作

c++ - 针对给定问题的优化算法?

memory-management - 如果CPU正在处理相应的内存请求,如何保证内存页面不会被驱逐?

c# - 如何有效地使用内存附加到 C# 中的大型 XML 文件

c++ - VS 2017 不会隐式地将 const char* 转换为 char*

c++ - 在 C++ 中访问 vector