int main()
{
int *memory = new int[5];
cout << "Memory starts at: " << &memory[0]; // 0x56225460beb0
memory = new int[10];
cout << "\nMemory starts at: "<< &memory[0]; // 0x56225460c2e0
// different
cout << '\n';
return 0;
}
当用new
初始化时,有没有一种方法可以在C++中扩展先前初始化的内存。 上面的代码最终将为memory
创建一个新的内存位置。 这是否也意味着以前分配的内存最终占用了我的内存空间,因为我没有删除
它。
您可以使用std::vector
,它在大多数情况下会过度分配,因此在某种程度上会扩展而不重新分配。
您也可以使用malloc
和realloc
,它们的作用与vector类似,但我不建议使用,因为您必须手动调用运算符new
和析构函数。
你也可以设计你自己的分配器,它可以做你想做的任何事情,但是这需要做更多的工作,所以我还是用Vector吧。
根据这个场景,最好的解决方案,我建议你使用链表。
创建一个名为block的内存节点
class Node{
Node *next;//point to the next node
int value// value
...//whatever you need to add for your block(sometimes you need size add that also)
}
使用内存时,先添加节点(最初是头节点),然后逐个插入内存。 使用链表而不是使用固定大小的数组来操纵内存是很容易的。 最好参考操作系统中使用的内存管理技术。 然后你会得到更好的理解。
您可以使用C语言提供的realloc。
memory=(int*)realloc(memory,10);
它将从同一个地址重新分配。