增加正在运行的进程的堆大小

时间:2018-03-10 18:20:38

标签: c process operating-system

我是linux编程的新手,我想知道是否可以增加正在运行的进程的堆大小。如果有可能,请帮我解决问题。谢谢任何人的帮助。

2 个答案:

答案 0 :(得分:0)

只需使用malloc()calloc()等函数动态分配内存。要取消分配内存并将其返回到堆,请使用free()。这些函数将根据需要通过扩展或缩小来管理堆的大小。

示例:

堆中的所有内容都是匿名的。您无法直接访问内存。每次访问都是间接的。因此,将malloc()返回的已分配内存的地址存储在指针中。

int *ptr = malloc(sizeof(int));

我们可以使用*ptr来访问内存的内容。

*ptr = 3;
printf("%d", *ptr);

完成内存使用后。你用

解除分配
free(ptr);

根据Peter van der Linden关于C编程的书,

  

堆的末尾用一个称为" break"的指针标记。当堆管理器需要更多内存时,它可以使用系统调用brksbrk进一步推动中断。

     

您通常不会明确地自己调用brk,但如果malloc有足够的内存,最终会为您调用brk

     

您的计划可能无法同时拨打malloc()brk()。如果您使用malloc,则malloc希望能够完全控制何时调用brksbrk

堆的最大大小限制取决于系统的虚拟内存大小。

这是图像的原始复制品:

Memory

答案 1 :(得分:0)

堆只是记忆。没什么特别的。任何内存都可以成为堆。显示堆区域的图表是教学的,而不是真实的。

“堆”是“堆”只是因为内存是由堆管理器分配的。虽然大多数程序只有堆管理器,但可能有多个堆管理器。

因此堆大小由堆管理器控制。大多数简单的堆管理器使用户无法控制堆大小。当需要内存来响应分配调用时,堆管理器会分配更多内存。

一些堆管理器为用户提供函数调用,允许他分配扩展堆大小。

相关问题