C 中程序的最大堆大小是固定的,还是如果我继续 malloc-ing 它会在某个时候开始溢出?
代码:
while(connectionOK) //connectionOK is the connection with server which might be forever
{
if(userlookup_IDNotFound(userID))
user_struct* newuser = malloc(getsize(user_struct));
setupUserAccount(newuser);
}
如果这很重要,我在 ubuntu/linux 中使用 gcc。我知道像 getrlimit 这样的东西,但不确定它是否给出堆大小。尽管它确实为输入参数中的选项之一提供了默认堆栈大小。此外,valgrind 可能是一个很好的工具,如这里建议的如何获取程序的堆大小,但如果存在堆溢出,我想动态打印错误消息。我的理解是操作系统在进程创建开始时分配的进程地址空间(如果它愿意,它实际上可以使用整个内存),但我不确定它是否会在请求时动态分配更多物理内存额外的内存。