存储指向类对象的指针地址的最佳方式
best way to store adresses of pointer to an object of class
我有一个动态创建对象的类a:
A *object;
object = new A;
在一次执行中会有很多A的对象。我在a中创建了一个方法,根据传递的id返回特定对象的地址。
A *A::get_obj(int id)
get_obj的实现需要迭代,所以我选择vector来存储对象的地址。
vector<A *> myvector
我认为另一种方法是通过创建一个文件&将地址存储为特定行上的文本(这将是id)。这将帮助我减少内存使用,因为我不会创建一个向量。我不知道的是这个方法会不会比矢量法耗费更多的时间?欢迎使用其他方法。
不要在文件中存储指针。永远。对象A比指向它们的指针占用了更多的空间。如果您需要的A多于一次所能容纳的数量,那么您需要根据需要创建它们,并在删除之前将实例数据序列化到磁盘,但不包括地址。
这个方法会比vector方法消耗更多的时间吗?
是的,它将消耗更多的时间-每次查找将花费数千倍的时间。如果查找很少,这不会有什么影响,但如果查找频繁,则可能很糟糕。
这将帮助我减少内存使用
您希望以这种方式管理多少对象?您确定内存使用会成为一个问题吗?
这是你的两个选择,真的。您可以在内存或磁盘中管理列表。根据您的使用场景,您可以组合这两种方法。例如,您可以将经常使用的对象保存在内存中,并将不经常使用的对象写入磁盘(这基本上是缓存)。欢迎使用其他方法
将数据存储在文件中要比存储在RAM中慢得多。
关于数据结构本身,如果你通常使用所有的ID,也就是说,如果你的向量通常有空单元格,那么std::vector
可能是最合适的方法。但如果你的载体有很多空细胞,std::map
可能会给你一个更好的解决方案。它将消耗更少的内存,并给出0 (logN)的访问复杂度。
在这里,我认为最重要的是你的数据集和平台的大小。对于现代PC来说,处理数千个条目的内存映射是非常快的,但是如果你处理千兆字节的数据,你最好将它存储在一个真正的磁盘数据库中(例如MySQL)。
相关文章:
- CUDA:统一内存和指针地址的更改
- 是否可以仅通过将分配的指针地址存储在C++中来分析内存?
- 向指针地址添加 20 个字节偏移量
- 如何理解智能指针的底层指针地址?
- 初学者问题:C++指针/地址 - 和变量之后不是以前?
- 返回数组中值的指针地址
- C++向指针地址添加 4 个字节
- 指针地址的内存偶尔更改了函数前和后返回
- 如何根据指针地址获取指针内容
- C++ 将指针地址传递给函数
- 直接从指针/地址访问数组的元素
- 如何在没有作弊引擎的情况下从其他应用程序获取指针地址?
- 如何保存指针地址,以便另一个指针可以继续处理它
- 间接寻址运算符如何返回带有运算符重载的指针地址
- 使用已删除的指针地址.据我所知,
- 如何保护类外用户可以修改的指针地址?C++
- 多个调用构造函数将更改C 中的成员指针地址
- 类对象指针的向量:如何在指针地址获得价值?C 和SDL_RECT
- Visual Studio C 2K15-在指针地址上获取错误
- 指针地址和参考混乱