程序?qū)τ诙褍?nèi)存的自動管理分為CPP一類的自動引用計數(shù)和Java的GC。Android app有時卡頓一下权埠,因為程序在集中釋放堆殖卑。如果把自動釋放堆放到其他線程中,程序運(yùn)行效率是否進(jìn)一步提高倒源?
//
// 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;
//循環(huán)堆內(nèi)存分配和釋放
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的地址存放到指針數(shù)組中苛预。然后集中進(jìn)行釋放。當(dāng)在主線程調(diào)用myfunc函數(shù)與異步調(diào)用程序快了0.1笋熬。無論是自動引用計數(shù)還是java GC機(jī)制热某,原理類似,使用一個容器存放指針胳螟,在合適的時機(jī)集中釋放昔馋。
本程序,同樣進(jìn)行集中釋放糖耸,只不過不影響主線程秘遏。