Next: Calls to different language
Up: Memory Tracing
Previous: Activating Memory Tracing
Contents
Using Memory Tracing
You can request Cactus to store the memory consumption at a certain
instance in the program flow, and return the difference in memory
allocation some time later.
- int CCTK_MemTicketRequest(void)
- Request a ticket: save the current total memory to a database.
Return an integer (ticket). Use the ticket to calculate the
difference in memory allocation between the two instances in
CCTK_MemTicketCash.
- long int CCTK_MemTicketCash(int your_ticket)
- Cash in your ticket: return the memory difference between now and the
time the ticket was requested. Tickets can be cashed in
several times. See example below.
This only tracks the real data memory, which is the same as in
undebug mode. It does not keep track of the internal allocations
done to provide the database, the motivation is that this is not
allocated either if you compile undebugged.
- int CCTK_MemTicketDelete(int your_ticket)
- Delete the memory ticket. The ticket ID will not be reused, since
it's incremented with every ticket request, but the memory of
the memory datastructure is deallocated.
- unsigned long int CCTK_TotalMemory(void)
- Returns the total allocated memory (not including the tracing
data structures).
- void CCTK_MemStat
- Prints an info string, stating the current,
past, and total memory (in bytes) allocation between two
successive calls to this routine, as well as the difference.
Sample C code demonstrating the ticket handling. Two tickets are
requested during malloc operations. The CCTK_MALLOC statement is
used directly. They are cashed in, and the memory
difference is printed. Ticket 1 is cashed twice. The tickets are
deleted at the end.
int ticket1;
int ticket2;
/* store current memstate, ticket: t1*/
t1 = CCTK_MemTicketRequest();
/* allocate data */
hi = (int*) CCTK_MALLOC(10*sizeof(int));
/* store current memstate, ticket: t2*/
t2 = CCTK_MemTicketRequest();
/* cash ticket t1, print mem difference */
printf("NOW1a: %+d \n",CCTK_MemTicketCash(t1));
/* allocte some more data */
wo = (CCTK_REAL*)CCTK_MALLOC(10*sizeof(CCTK_REAL));
/* cash ticket t1 and t2, print mem difference */
printf("NOW1b: %+d \n",CCTK_MemTicketCash(t1));
printf("NOW2 : %+d \n",CCTK_MemTicketCash(t2));
/* delete the tickets from the database */
CCTK_MemTicketDelete(t1);
CCTK_MemTicketDelete(t2);
Next: Calls to different language
Up: Memory Tracing
Previous: Activating Memory Tracing
Contents
|