int main() { clink head = NULL; //循环链表指针 clink memory = NULL; //内存管理指针 clink ptr; int list[6] = {1,2,3,4,5,6}; //数组内容 int i; //用循环创建内存链表,总共7个结点 for(i = 0; i < 7; i++) { //分配一个结点内存 ptr = (clink)malloc(sizeof(cnode)); if(!ptr) //检查内存指针 { exit(1); } ptr->next = NULL; ptr->data = 100 + i; //创建结点内存 freenode(&memory,ptr); //释放一个结点内存 } printmemory(memory); //输出内存链表 head = createclist(list,&memory,6); //创建循环链表 printclist(head); //输出循环链表 //循环链表的内存释放 freeclist(head,&memory); printmemory(memory); //输出内存链表 return 0; }
int dns_read_answer(u8* buf, int len) { int j,k; say("answer{\n"); say("name=%02x%02x\n", buf[0], buf[1]); say("type=%02x%02x\n", buf[2], buf[3]); say("class=%02x%02x\n", buf[4], buf[5]); say("ttl=\n"); say("len=%x\n",buf[11]); j = 12; /* j += 12; while(1) { k = buf[j]; if(k > 100)break; say("%.*s", k, buf+j+1); j += k+1; if(0 == buf[j])break; else say("."); } */ if(4 == buf[11])say("%d.%d.%d.%d\n",buf[j],buf[j+1],buf[j+2],buf[j+3]); j += buf[11]; printmemory(buf, j); say("}\n"); return j; }
int dnsserver_rootwrite( struct element* ele, void* sty, struct object* obj, void* pin, u8* buf, int len) { say("@dnsserver_rootwrite\n"); printmemory(buf, len); return 0; }
int platformread(char* arg) { QWORD addr; //read memory addr = *(QWORD*)arg; addr &= 0xffffffffffff; if(addr==0x79726f6d656d) //'memory' { if( arg[6] == '.' ) //memory.400000 { myownstr2data(arg+7 , &addr); printmemory( (char*)addr , 0x200 ); return 1; } else if( arg[6] == '[' ) //memory[from,to] { say("reading memory[?,?]\n"); return 2; } return -100; } //read gpio addr = *(DWORD*)arg; if(addr==0x6f697067) { if( arg[4] == '.' ) //gpio.70 { myownstr2data(arg+7 , &addr); say( "gpio.%x\n" , addr ); return 3; } else if( arg[4] == '[' ) //gpio[cf8,cfb] { say("gpio[?,?]\n"); return 4; } return -200; } return -10000; }
int main (int argc, char **argv) { extern char* optarg; extern int optind, optopt; int c, errflg, backflg, incrflg, nopagflg, pagflg, rank, nranks; hid_t fapl, file, group, group1, dset; size_t incr, page; unsigned iter, level, igroup, idset, maxiter; char name[MAX_LEN]; char g1name[MAX_LEN]; char g2name[MAX_LEN]; hsize_t dims[3] = { X, Y, Z }; float *buf; double start, stop; double t1, t2; char cdum[MAX_LEN]; int i, memtotal, memfree, buffers, cached, swapcached, active, inactive; float fdum; assert (MPI_Init (&argc, &argv) >= 0); assert (MPI_Comm_rank (MPI_COMM_WORLD, &rank) >= 0); assert (MPI_Comm_size (MPI_COMM_WORLD, &nranks) >= 0); /* parse arguments */ backflg = errflg = incrflg = nopagflg = pagflg = 0; incr = INCREMENT; page = PAGE_SIZE; maxiter = MAX_ITER; while ((c = getopt(argc, argv, ":bni:t:p:")) != -1) { switch (c) { case 'b': backflg++; break; case 'i': incrflg++; incr = (size_t)atol(optarg); if (incr == 0) { fprintf(stderr, "Option -%c requires a positive integer argument\n", optopt); errflg++; } break; case 'n': nopagflg++; break; case 'p': pagflg++; page = (size_t)atol(optarg); if (page == 0) { fprintf(stderr, "Option -%c requires a positive integer argument\n", optopt); errflg++; } break; case 't': maxiter = (unsigned)atol(optarg); if (maxiter == 0) { fprintf(stderr, "Option -%c requires a positive integer argument\n", optopt); errflg++; } break; case ':': /* -i or -p without operand */ fprintf(stderr, "Option -%c requires an operand\n", optopt); errflg++; break; case '?': fprintf(stderr, "Unrecognized option: -%c\n", optopt); errflg++; break; default: errflg++; break; } } if (errflg) { if (rank == 0) { fprintf(stderr, "usage: . . . "); fprintf(stderr, "usage: h5core [OPTIONS]\n"); fprintf(stderr, " OPTIONS\n"); fprintf(stderr, " -b Write file to disk on exit\n"); fprintf(stderr, " -i I Memory buffer increment size in bytes [default: 512 MB]\n"); fprintf(stderr, " -n Disable write (to disk) paging\n"); fprintf(stderr, " -p P Page size in bytes [default: 64 MB]\n"); fprintf(stderr, " -t T Number of iterations [default: 5]\n"); fprintf(stderr, "\n"); fflush(stderr); } exit(2); } if ((backflg == 0) && (pagflg > 0)) { if (rank == 0) { fprintf(stderr, "The -p has no effect without the -b option"); fflush(stderr); } } if (pagflg && nopagflg) { if (rank == 0) { fprintf(stderr, "The -n and -p options are mutually exclusive."); fflush(stderr); } exit(3); } /* Let's go! */ fapl = H5Pcreate (H5P_FILE_ACCESS); assert (fapl >= 0); assert (H5Pset_libver_bounds (fapl, H5F_LIBVER_LATEST, H5F_LIBVER_LATEST) >= 0); assert (H5Pset_fapl_core (fapl, incr, (hbool_t) backflg) >= 0); if (nopagflg == 0) /* the user didn't disable paging */ { assert (H5Pset_core_write_tracking (fapl, 1, page) >= 0); } if (rank == 0) { printf("\n"); printf("Write to disk: %s\n", (backflg > 0) ? "YES" : "NO"); printf("Increment size: %ld [bytes]\n", incr); if (nopagflg == 0) { printf("Page size: %ld [bytes]\n", page); } else { printf("Page size: PAGING DISABLED!\n"); } printf("Iterations: %d\n", maxiter); printf("\n"); fflush(stdout); } buf = (float *) malloc (X * Y * Z * sizeof (float)); // Get basic memory info on each node, see how memory usage changes // after flushing to disk; do we end up back where we started? getmemory (&memtotal, &memfree, &buffers, &cached, &swapcached, &active, &inactive); if (rank == 0) { fprintf (stdout, "BEFORE RUNNING:\n"); fflush (stdout); } for (i = 0; i < nranks; i++) { if (rank == i) { printmemory (rank, memtotal, memfree, buffers, cached, swapcached, active, inactive); } MPI_Barrier (MPI_COMM_WORLD); } start = MPI_Wtime (); /* outer loop - simulated time */ for (iter = 0; iter < maxiter; ++iter) { if (rank == 0) { printf ("Iteration: %u\n", iter); assert (fflush (stdout) == 0); } assert (sprintf (name, "rank%05dtime%04u.h5", rank, iter) > 0); file = H5Fcreate (name, H5F_ACC_TRUNC, H5P_DEFAULT, fapl); assert (file >= 0); t1 = MPI_Wtime (); /* time level */ for (level = 0; level < MAX_TIME_LEVEL; ++level) { assert (sprintf (g1name, "level%03d", level) > 0); group = H5Gcreate2 (file, g1name, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT); assert (group >= 0); /* group level */ for (igroup = 0; igroup < MAX_GROUPS; ++igroup) { assert (sprintf (g2name, "group%02d", igroup) > 0); group1 = H5Gcreate2 (group, g2name, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT); assert (group1 >= 0); /* dataset level */ for (idset = 0; idset < MAX_DATASETS; ++idset) { assert (sprintf (name, "dataset%02d", idset) > 0); assert (H5LTmake_dataset_float (group1, name, RANK, dims, buf) >= 0); #ifdef DEBUG assert (fprintf (stderr, "rank %i time %i Wrote dataset %s/%s/%s\n", rank, level, g1name, g2name, name)); assert (fflush (stderr) == 0); #endif } assert (H5Gclose (group1) >= 0); } assert (H5Gclose (group) >= 0); } t2 = MPI_Wtime (); assert (fprintf (stdout, "rank %04i Total time for buffering chunks to memory:\t %f seconds\n", rank, t2 - t1)); assert (fflush (stdout) == 0); MPI_Barrier (MPI_COMM_WORLD); // To keep output less jumbled getmemory (&memtotal, &memfree, &buffers, &cached, &swapcached, &active, &inactive); if (rank == 0) { fprintf (stdout, "BEFORE FLUSHING:\n"); fflush (stdout); } for (i = 0; i < nranks; i++) { if (rank == i) { printmemory (rank, memtotal, memfree, buffers, cached, swapcached, active, inactive); } MPI_Barrier (MPI_COMM_WORLD); } /* close the file */ t1 = MPI_Wtime (); assert (H5Fclose (file) >= 0); t2 = MPI_Wtime (); getmemory (&memtotal, &memfree, &buffers, &cached, &swapcached, &active, &inactive); if (rank == 0) { fprintf (stdout, "AFTER FLUSHING:\n"); fflush (stdout); } for (i = 0; i < nranks; i++) { if (rank == i) { printmemory (rank, memtotal, memfree, buffers, cached, swapcached, active, inactive); assert (fprintf (stdout, "rank %04i Total time for flushing to disk:\t\t %10.2f seconds\n", rank, t2 - t1)); assert (fflush (stderr) == 0); } MPI_Barrier (MPI_COMM_WORLD); } } stop = MPI_Wtime (); MPI_Barrier (MPI_COMM_WORLD); if (rank == 0) { printf ("Total time: %f s\n", stop - start); printf ("Aggregate bandwidth per process: %f GB/s\n", ((float) X * Y * Z * sizeof (float)) * ((float) MAX_DATASETS * MAX_GROUPS * MAX_TIME_LEVEL * MAX_ITER) / (1024.0 * 1024.0 * 1024.0 * (stop - start))); } free ((void *) buf); assert (H5Pclose (fapl) >= 0); assert (MPI_Finalize () >= 0); return 0; }
int dns_read_query(u8* buf, int len) { printmemory(buf, len); return len; }