如果类数组中的向量是动态push_backed的,内存如何工作
How memory works if vectors inside class array are dynamically push_backed?
假设我们有以下类:
class Test {
public:
Test() {}
std::vector<int>& getIntList() {
return intList;
}
private:
std::vector<int> intList;
};
此外,我们在 main 函数中还有以下代码来声明类数组:
int main(void) {
Test* test[20];
for (int i = 0; i < 20; ++i) {
test[i] = new Test();
}
}
在这些情况下,将实例化测试对象。
现在,如果我在每个类内的向量中随机附加多个项目,
在调整其内存大小时,可能存在冲突每个类中每个向量的内存地址范围的机会。
在这种情况下,是否将整个"测试"对象复制到其他内存区域并调整矢量大小?或者,向量 STL 是否仅在类引用向量时复制到其他内存区域并调整大小?
完全,像这样编码不是一个好主意吗?
考虑这个例子:
struct foo {
std::vector<int> x;
std::vector<int> y;
};
现在sizeof(foo)
是一个编译时常量。当您向向矢量添加元素时,它不会改变。sizeof(std::vector<int>)
也是恒定的。
当向量的size()
增长时,foo
实例的大小不会增加。它类似于拥有一个动态数组(仅出于示例(:
struct bar {
int* c_array;
};
在这里,sizeof(bar)
很可能只是sizeof(int*)
,因为它只是一个指针,即使它可以指向 c 样式数组的第一个元素,或者指向单个int
。
相关文章:
- 在C++中释放内存期间,迭代器与指针有何不同
- 为什么它在不分配内存的情况下工作正常
- 自定义内存管理器在发布模式下工作正常,但在调试模式下则不然
- 无论代码长度如何,以下代码的内存要求有何不同?
- C++ 友元函数在内存位置上有何不同?
- 如果类数组中的向量是动态push_backed的,内存如何工作
- C 编程,动态内存无法使用Malloc和Calloc正常工作
- 读取进程内存无法正常工作,使用 UTF16 字符串
- QSerialBus 工作中的内存泄漏
- OpenCL:动态内存分配,是使用空闲工作项更好还是同时写入更好
- C++动态内存分配未按预期工作
- 如果malloc/free对显然做了同样的工作,为什么C++标准库容器使用内存池
- std::共享内存中的互斥对象不工作
- 我不明白放置新的工作方式以及如何释放内存
- 我应该为等待工作线程的主线程使用哪种内存顺序
- 有可能实现一个与数组而不是单个对象一起工作的内存池吗
- 动态内存复制是如何工作的
- 内存屏障:如何确保工作线程可以看到初始化写入?
- 当 int 方法工作正常时,void 方法有何不同,或者为什么我不能调用 void 方法?
- 我如何让写时复制在linux上的共享内存上工作