- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我写了一个简单的线程程序:
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
#include <stdint.h>
#define THREADS 5
void* HelloWorld(void *t)
{
printf("Thread ID #%lu: (%lu) Hello World !!\n", pthread_self(), (unsigned long)t);
return NULL;
}
int main()
{
pthread_t thread[THREADS];
uint32_t i;
int err;
for(i = 0; i < THREADS; ++i)
{
err = pthread_create(&thread[i], NULL, &HelloWorld, (void*)(unsigned long long)i);
if(err != 0)
{
printf("Error %d: Thread %d Creation Unsuccessful !!\n", err, i);
}
printf("Thread %lu in main()\n", pthread_self());
}
/*
for(i = 0; i < THREADS; ++i)
{
pthread_join(thread[i], NULL); // Error checking implemented
}
*/
return 0;
}
但是关于使用 valgrind 作为:
valgrind --tool=memcheck --leak-check=full --show-reachable=yes ./hello
无论是否在程序中使用 pthread_join()
,它都显示相同的内存使用/泄漏输出。
请在我阅读 here 时解释此行为那:
The pthread_join() or pthread_detach() function should eventually be called for every thread that is created with the detachstate attribute set to PTHREAD_CREATE_JOINABLE so that storage associated with the thread may be reclaimed.
如果我不调用 pthread_join()
如何回收存储空间
最佳答案
根据我的理解提出了两个问题。一个是为什么 valgrind
在调用或不调用 pthread_join()
时报告相同的内存泄漏,另一个是调用 pthread_join()
是如何回收的存储,如果它实际上没有释放任何内存的话。
对这两个问题的一个可能解释是,您的线程库在调用 pthread_join()
后实际上并没有释放任何内存,而是将分配的资源放入“如果我结束时可用”在未来创建另一个线程”容器。让我们将该容器称为池。下一次调用 pthread_create()
可以重新使用池中的任何资源。如果池为空,则分配新内存。
如果不调用 pthread_join()
,与退出线程关联的任何资源都不会返回到池中。因此,这些资源将保持不可用,池保持为空,因此新的 pthread_create()
将为线程创建请求分配更多资源。
这意味着 pthread_join()
根本不需要释放任何内存。它可以简单地将获取的资源放入线程库维护的池中。因此,无论是否调用 pthread_join()
,valgrind
都会显示相同数量的“泄漏”内存。但是,内存由 pthread_join()
回收,因为它被放置在池中以供将来调用 pthread_create()
。
关于c - "reclaimation of storage"对于线程的 pthread_join() 和 pthread_detach() 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18437113/
我创建了一个在后台持续运行的服务 - 它永远不应该离线。 对于插入服务的每个较小模块,我有点担心需要使用的静态变量。由于父服务始终启动并运行(假设它永远不会宕机 - 完美的场景),静态成员不会随着时间
我有动态 PersistentVolume使用 PersistentVolumeClaim 进行配置. 我想在 pod 完成后保留 PV。所以我想要什么persistentVolumeReclaimP
我有以下 xaml:
我正在开发一个 iPad(仅限)应用程序,我偶然发现了一个奇怪的问题。该应用程序在 iPad 1 上出现内存警告后终止,但在 iPad 2 上运行正常。我正在使用 ARC 并以 iOS 5 为目标。我
可以使用命令docker system df ( mirror )(在 Docker 1.13.0 中引入)查看 docker 磁盘使用情况,例如: username@server:~$ docker
相关问题: python - import at top of file vs inside a function Should Python import statements always be
要在 App Store Connect 中更改应用程序的 bundle ID,不能有任何先前上传的版本;如果有,则无法编辑捆绑 ID。因此,要更改捆绑 ID(并随后从 App Store Conne
我写了一个简单的线程程序: #include #include #include #include #define THREADS 5 void* HelloWorld(void *t
我正在编写我的 servlet 程序并使用 jconsole 和 jmap 来监视其内存状态。我发现当我的程序运行时,内存池“PS Old Gen”变得越来越大,最后我的 servlet 无法响应任何
在一个方法中,我创建一个新的RDD,并缓存它,当rdd超出范围后,Spark是否会自动取消持久化RDD? 我是这么想的,但实际上发生了什么? 最佳答案 不,它不会自动取消持久化。 为什么?因为在您看来
我使用 VS2015 和 ReSharper C++ 编写了一个 c++ 程序,我遇到了以下检查: 有人可以解释一下为什么这个检查会跳起来吗?我相信这不是太关键的东西,但我还是很想知道。 这是相关的代
我在 EC2(Ubuntu 18.04)上运行一个私有(private) Gitlab Group 运行器。它最近经常在各个阶段开始失败的构建作业,但都有相同的根本原因:no space left o
这是来自 previous one 的后续问题这可能包含了太多的间接细节。考虑以下代码: BarViewController.h #import @protocol SomeDelegate - (
我是一名优秀的程序员,十分优秀!