gpt4 book ai didi

c - 程序堆大小?

转载 作者:行者123 更新时间:2023-12-01 01:54:20 26 4
gpt4 key购买 nike

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 也可能是这里建议的好工具 how to get Heap size of a program但我想在堆溢出时动态打印一条错误消息。我的理解是在进程创建之初由操作系统分配的进程地址空间(如果它愿意,它实际上允许使用整个内存)但我不确定它是否在请求时动态地获得更多物理内存额外的内存。

最佳答案

堆永远不会溢出,它只是在某个点用完内存(通常是当 malloc() 返回 NULL 时)所以要检测内存不足只需检查返回值malloc() 调用的值。

if (newuser == NULL)
{
printf("OOM\n");
exit(1); /* exit if you want or can't handle being OOM */
}

malloc() 内部将从操作系统请求更多内存,因此它会动态扩展,因此它不是真正固定的大小,因为它会将不再需要的页面返回给操作系统并请求更多内存在需要它们的任何给定时间。

关于c - 程序堆大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14697170/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com