-1

我对使用动态分配内存的时间限制有点好奇。比如说,对于一个预计一次运行数周的系统,最初 malloc 内存用于某些用途并在延长的时间段内不断重用这个 malloc 的内存是否安全?

是否有任何重新分配内存的规范?

4

4 回答 4

2

只要它不释放它,进程可以使用malloc()ed 内存的时间是没有限制的。

换句话说,您可以分配一次,然后根据需要继续使用相同的内存。

与重复分配和释放内存相比,这样做的好处是:

  • 这很简单。
  • 它更有效率。
  • 它可以减少内存碎片。

缺点是:

  • 它不太灵活(如果分配块的大小需要更改,则不能使用)。
  • 拥有一个全局块可能会导致重入和线程安全的复杂性。
于 2013-05-09T06:17:38.193 回答
2

如果你malloc是一个内存区域,而永远不会free使用它,你可以随心所欲地使用(只要你的系统足够可靠:从长远来看,硬件确实会失败!)。

malloc如果你和free相同的内存区域,事情可能会有所不同(特别是如果malloc和的顺序free不同或是随机的)。从长远来看,可能会发生一些内存碎片(您无能为力,除非进行一些显式压缩)。

于 2013-05-09T06:17:48.477 回答
0

对于长时间运行的应用程序,使用内存池并确保您始终有一些内存与其他进程分开可能很有用

于 2013-05-09T06:19:26.910 回答
0

您可以保留记忆的时间没有时间限制。:) 但是,如果您不使用内存,操作系统可以在需要时将其换出。因此,如果您使用大量内存,操作系统可能会交换超过所需的内存。当您使用该内存时,它需要再次换入。根据操作系统的工作方式,内存可能不会真正分配,只是在您访问它之前保留。

于 2013-05-09T07:52:57.987 回答