gpt4 book ai didi

linux - Linux 中一个简单程序的奇怪行为

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:31:53 25 4
gpt4 key购买 nike

我们编写了一个非常简单的 C++ 程序来隔离错误。该应用程序将一个数字作为参数并创建该数量的线程并将所有这些线程发送到事件循环中。如果我们运行超过 3 个线程(包括主线程)的应用程序,top 显示它占用了 100+MB 的虚拟内存。但是,如果我们使用 <=3 个线程运行它,它会使用大约 36MB 的虚拟内存运行。我们 strace 应用程序并发现在第一个场景中有一个大约 65MB 的 mmap 是匿名映射的,不会取消映射。问题是内存使用量随着线程数的增加而增加。而且我们有大量具有大量线程的二进制文件,因此似乎浪费了很多空间。为什么会这样? SLES11 64 位。

最佳答案

每个线程默认获得一个大约 8Mb 的堆栈。您可以在使用 pthread_attr_setstacksize 创建线程时设置默认值.确保您总是: pthread_join()'ing 线程已经结束。或者;将它们创建为分离线程,否则您将在线程结束时泄漏内存。

不过,使用大量虚拟内存通常不是问题,除非您确实使用了所有空间,否则它只是虚拟内存 - 在 64 位计算机上您几乎不会用完它。

关于linux - Linux 中一个简单程序的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4470401/

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