美文网首页
异步释放堆内存

异步释放堆内存

作者: 我明白了我是一条鲶鱼 | 来源:发表于2024-01-03 15:40 被阅读0次

    程序对于堆内存的自动管理分为CPP一类的自动引用计数和Java的GC。Android app有时卡顿一下,因为程序在集中释放堆。如果把自动释放堆放到其他线程中,程序运行效率是否进一步提高?

    //
    //  main.c
    //  AsynchronousRelease
    //
    //  Created by 孙树港 on 2024/1/4.
    //
    
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <pthread.h>
    #include <unistd.h>
    #include <time.h>
    
    #define size 1024*1024
    
    int *p[500];
    
    void myfunc()
    {
        for (int i = 0; i < 500; i++) {
            free(p[I]);
        }
        
        return ;
    }
    
    int main(int argc, const char * argv[]) {
        // insert code here...
        clock_t begin,end;
        begin=clock();
        
        pthread_t th1;
        //循环堆内存分配和释放
        for (int i = 0; i < 500; i++) {
            int *num = NULL;
            num = (int *) malloc(size);
            memset(num, '*', size);
            p[i]= num;
            
            //puts("do something ");
            //free(num);
        }
        //myfunc();
        pthread_create(&th1, NULL, myfunc, NULL);
        end=clock();
        printf("%lf\n",(double)(end-begin)/CLOCKS_PER_SEC);
        printf("Main Function Over!\n");
        return 0;
    }
    
    

    把malloc的地址存放到指针数组中。然后集中进行释放。当在主线程调用myfunc函数与异步调用程序快了0.1。无论是自动引用计数还是java GC机制,原理类似,使用一个容器存放指针,在合适的时机集中释放。

    本程序,同样进行集中释放,只不过不影响主线程。

    image.png image.png

    相关文章

      网友评论

          本文标题:异步释放堆内存

          本文链接:https://www.haomeiwen.com/subject/fcxvndtx.html