作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
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/
我是一名优秀的程序员,十分优秀!