//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
#include <stdio.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>
#include <time.h>
#include <stdlib.h>
#include <pthread.h>
int new_size = 1 * 1024 * 1024;
int g_write_flg = 0;
void run_cpu()
{
int a = 1;
for (int i = 1; i < 1000 * 1000 * 1000; ++i)
{
a = a/i;
}
}
void writefile(FILE* f,char *fname,char * ctx,int nsize)
{
f = fopen(fname, "w");//
if (f)
{
fwrite(ctx, 1, nsize, f);
fclose(f);
}
else
{
printf("writefile fopen failed!\n");
}
}
void* test_fun(void* fd)
{
printf("test_fun begin.... idx:%d\n", *(int*)fd);
sleep(10);
if (new_size > 0)
{
printf("nnnnn\n");
char* p = new char[new_size];
sleep(10);
printf("ddddd\n");
delete[] p;
sleep(10);
printf("n2n2n2n2\n");
p = (char*)malloc(new_size);
sleep(10);
printf("d2d2d2\n");
free(p);
}
printf("over sleep...\n");
sleep(10);
printf("over !\n");
/*
int idx = *(int*)fd;
char cfile[10];
sprintf(cfile, "./out%d.txt", idx);
FILE* f = NULL;// fopen(cfile, "w");
while (true)
{
char* p = new char[new_size];
//memset(p, idx, new_size);
if (g_write_flg)
{
printf("write file :%s size:%d MB\n",cfile, new_size/(1024*1024));
writefile(f,cfile, p, new_size);
}
//run_cpu();
delete[] p;
sleep(10);
}*/
pthread_exit(NULL);
}
void create_test_thread(int idx, pthread_t &thread)
{
int *tmpidx = new int;
*tmpidx = idx;
if (pthread_create(&thread, NULL, test_fun, tmpidx) != 0)//创建子线程
{
perror("pthread_create check_inite_rknn_stuck");
}
/*else {
pthread_detach(thread);
}*/
}
int main(int argc, char *argv[])
{//参数1:是否写文件 参数2:测试线程个数 参数3:每次申请内存大小(M)
if (argc != 4)
{
printf("input arg param is error! \n");
return 0;
}
g_write_flg = atoi(argv[1]);
int threadnum = atoi(argv[2]);
int nsize = atoi(argv[3]);
new_size = nsize * new_size;
printf("write_flg:%d thread num:%d new_size:%d\n",g_write_flg,threadnum, nsize);
pthread_t thread[1024];
for (int i = 0; i < threadnum; ++i)
{
create_test_thread(i,thread[i]);
sleep(1);
}
for (int i = 0; i < threadnum; ++i)
{
printf("exit thread:%d ret:%d",i,pthread_join(thread[i],NULL));
}
while (true)
{
printf("test running ...\n");
sleep(20);
}
return 0;
}
进程创建了一个线程并且在该线程内分配一个很小的内存1k,整个进程虚拟内存立马增加64M,然后再分配,内存就不增加了。
如果申请较大内存如1M则不会从64M空间中申请,只有小内存才会。
浙公网安备 33010602011771号