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

异步释放堆内存

作者: 我明白了我是一条鲶鱼 | 来源:发表于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

相关文章

  • 十一、闭包(堆栈内存释放问题)------ 2020-04-05

    1、堆内存释放问题: 2、栈内存释放问题:

  • 【16】内存管理机制

    1. 内存:栈区间、堆区间 栈:栈上的内存是系统自动开辟,自动释放堆:堆上的内存需要手动开辟,手动释放。但在pyt...

  • js : 棧内存+堆内存+内存释放

    棧内存和堆内存 棧内存:提供了一个供JS代码执行的环境全局作用域私有所拥域 堆内存:存储引用数据类型的数据函数数据...

  • python内存管理

    内存结构中分栈区间和堆区间,栈区间中内存是系统自动开启自动释放。堆区间的内存需要手动申请手动释放。但是目前绝大部分...

  • 内存释放(堆内存)和作用域(栈内存)销毁

    内存释放(堆内存)和作用域(栈内存)销毁对象数据类型或者函数数据类型在定义的时候会首先开辟一个堆内存// 堆内存的...

  • JS的堆栈原理

    堆 指的是 堆内存, 堆是动态分配内存,内存大小不一,也不会自动释放。堆 是在程序运行时,而不是在程序编译时,申...

  • iOS开发积累知识(一)----理解堆栈

    0.堆和栈都是内存; 1.堆是由程序员手动释放的,不释放的话会导致内存泄露; 栈是由编译器管理自动释放的,申请过大...

  • iOS内存泄漏问题及解决方案

    内存泄漏 内存泄漏指的是程序中已动态分配的堆内存由于某些原因未能释放或无法释放,造成系统内存的浪费,导致程序运行速...

  • c++之内存相关

    堆空间内存控制 malloc \ free C语言模式内存申请和释放 new \ delete ...

  • 内存泄露 && LeakCanary

    内存泄漏(Memory Leak) 程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,...

网友评论

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

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