首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Solaris连续内存分配不会减少图像大小

Solaris连续内存分配不会减少图像大小
EN

Stack Overflow用户
提问于 2013-08-08 19:25:20
回答 2查看 265关注 0票数 0

我在Solaris sparc服务器上编写了一个测试程序,并使用Studio编译了它

代码语言:javascript
复制
#include <iostream>

using namespace std;

int main()
{
    const int size =  9999;
    char *ptr[size];

    while(1)
    {
       for(int i = 0; i < size; i++)
       {
           ptr[i] = new char[2048];
       }
        for(int i = 0; i < size; i++)
        {
           delete[] ptr[i];
        }
    }
    return  9;
}

compiled it as
CC -m64 -g 

现在,当我运行它时,我可以看到,当进程达到系统内存限制时,进程大小不断增加,进程崩溃。我使用桁架跟踪它,我只能看到brk系统调用。在搜索一些甲骨文站点时,我设置了LD_PRELOAD=libmapmalloc.so,然后进程大小是恒定的。truss显示,这一次它使用malloc映射匿名内存页。

另一方面,我也试图在RHELLinux2.6 x86盒上看到这种行为,它也使用了桁架,但是进程大小是恒定的。

我不理解行为或Solaris,在第一种情况下,它使用brk来增加数据段的大小,但是当我删除时,它并没有减少它。有人能解释一下solaris为什么这样做吗?

因此,linux在这里所做的不同之处在于保持进程大小不变,因为它也使用相同的系统调用。

谢谢Niraj Rathi

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-08 20:22:00

我读了那篇文章,但正如您所看到的那样,我的分配模式几乎是恒定的,我正在分配大约20 my的内存,然后释放它,然后再分配20 my的内存。

因此,如果Solaris libc重用释放的内存,那么它不应该一次又一次地调用brk,进程大小应该保持不变,但是在这里,它是持续增长的,似乎释放的内存从未被重用过。

谢谢Niraj Rathi

票数 0
EN

Stack Overflow用户

发布于 2013-08-08 19:45:42

让我引用官方甲骨文的话:

注意,在执行free()之后,释放的空间可供应用程序进一步分配,而不返回给系统。只有当应用程序终止时,内存才返回给系统。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18134405

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档