【发布时间】:2013-01-05 10:53:09
【问题描述】:
我正在寻找一种在运行时为现有结构(最初已经分配了内存)分配额外内存(在 C 中)的方法。我有一种感觉,我可能可以使用memmove 或类似的东西,但这仍然只是一个复制操作,并且不会增加运行时结构可用的内存量。此外,我不想每次需要复制整个结构,这将在程序期间进行数百次(结构已经很大)。有人可以帮忙吗?
更新:感谢大家的回复。为了提供更多细节,我正在尝试运行一个 MPI 并行代码,该代码最初创建该结构的许多实例(称为“S”)。该结构的每个实例都包含一个数组“T”,它记录了在代码运行时发生的特定事件的时间。这些事件在运行时发生,并且每个 S 实例的事件数量不同。例如,S[0] 可能看到 100 个事件(因此需要一个长度为 100 个元素的数组),但 S[1] 可能只看到 1事件(和 S[2] 30 个事件等)因此,在开始时为 S 的每个实例(有数百万个)分配大量内存是非常浪费的,因为有些可能会填满数组,而另一些则不会甚至接近。确实,我已经尝试过了,但对于我正在运行它的机器来说,它太多了。
我会在这里尝试一些想法并发布我的进展。非常感谢!
【问题讨论】:
-
您无法知道操作系统是否会将已分配的内存复制到新的内存分配中。这取决于内存管理器,并且在操作系统下运行的 C 程序无法访问。
-
你不能。为什么不告诉我们你想要做什么,我们会告诉你如何做。
-
您应该向我们描述您的结构。如果您希望它在运行时变大,为什么不从变大开始呢?另一种方法是将内存池链接在一起并分段实现数组。有点像 C++ 中的
deque数据结构。
标签: c memory memory-management