2013-05-09 48 views
-1

我很好奇使用动态分配内存的时间限制。比方说,对于一个预计可以一次运行数周的系统,最初的malloc内存是否可以安全地用于某些用途,并且可以在更长的时间内不断重用这个malloc的内存?malloc分配内存的时间量可用于?

是否有任何重新malloc'ing内存规范?

+2

这看起来很琐碎,所以我错过了什么? – 2013-05-09 06:18:52

+0

你认为malloc会导致内存不可用吗? – 2013-05-09 07:41:22

回答

2

如果malloc一个存储区,从不free它,你愿意,你可以只要使用以下命令(只要你的系统足够可靠:硬件做失败,从长远来看)。

事情可能会有所不同,如果你malloc然后free相同的内存区域(特别是如果mallocfree的顺序是不一样的或者是随机的)。从长远来看,有些memory fragmentation可能会发生(除非有一些明确的compaction,否则你无法提供多少帮助)。

2

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

换句话说,你可以分配一次,然后继续使用相同的内存,只要你想。

相比反复分配和释放内存的这个好处是:

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

的缺点是:

  • 这是较不灵活(如果所分配的块的尺寸需要改变不能被使用)。
  • 拥有一个全局块可能会导致重入和线程安全性的复杂化。
0

对于长时间运行的应用程序,使用一个内存池,并确保你总是有一些来自其他进程分开存储可能是有用的

0

没有时间限制,可以允许保留多久的记忆。 :)但是,如果你不使用内存,操作系统可以自由地将其交换出来,如果它需要它。所以如果你使用大块内存,操作系统可能会比所需要的更多。当您使用该内存时,需要重新进行交换。 根据操作系统的工作方式,内存可能并不真正被分配,直到您访问它为止。