我是linux编程的新手,我想知道是否可以增加正在运行的进程的堆大小。如果有可能,请帮我解决问题。谢谢任何人的帮助。
答案 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"的指针标记。当堆管理器需要更多内存时,它可以使用系统调用
brk
和sbrk
进一步推动中断。您通常不会明确地自己调用
brk
,但如果malloc
有足够的内存,最终会为您调用brk
。您的计划可能无法同时拨打
malloc()
和brk()
。如果您使用malloc
,则malloc
希望能够完全控制何时调用brk
和sbrk
。
堆的最大大小限制取决于系统的虚拟内存大小。
这是图像的原始复制品:
答案 1 :(得分:0)
堆只是记忆。没什么特别的。任何内存都可以成为堆。显示堆区域的图表是教学的,而不是真实的。
“堆”是“堆”只是因为内存是由堆管理器分配的。虽然大多数程序只有堆管理器,但可能有多个堆管理器。
因此堆大小由堆管理器控制。大多数简单的堆管理器使用户无法控制堆大小。当需要内存来响应分配调用时,堆管理器会分配更多内存。
一些堆管理器为用户提供函数调用,允许他分配扩展堆大小。