例子:
malPro.acc文件:
#include <stdlib.h>
size_t totalMemoryAllocated; int totalAllocationFuncCalled; int totalFreeFuncCalled;void initProfiler() {
totalMemoryAllocated = 0; totalAllocationFuncCalled = 0; totalFreeFuncCalled = 0; }void printProfiler() {
printf("total memory allocated = %d bytes\n", totalMemoryAllocated ); printf("total memory allocation function called = %d \n", totalAllocationFuncCalled); printf("total memory free function called = %d\n", totalFreeFuncCalled); }before(): execution(int main()) {
initProfiler(); } after(): execution(int main()) { printProfiler(); }before(size_t s): call($ malloc(...)) && args(s) {
totalMemoryAllocated += s; totalAllocationFuncCalled ++; } before(size_t n, size_t s): call($ calloc(...)) && args(n, s) { totalMemoryAllocated += n * s; totalAllocationFuncCalled ++; }before(size_t s): call($ realloc(...)) && args(void *, s) {
totalMemoryAllocated += s; totalAllocationFuncCalled ++; } before() : call(void free(void *)) { totalFreeFuncCalled++; }mal.c文件:
#include <stdio.h>
#include <malloc.h>void t1(){ int *x ;printf(" core code:hehe ! \n");x = (int *)malloc(sizeof(int) * 4); printf(" core code:hehe ! ! \n");}int main(){ t1();int *x ;printf(" core code:hehe ! ! \n");x = (int *)malloc(sizeof(int) * 4); printf(" core code:hehe ! ! \n");return 0;}