1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 | #include <stdio.h> #include <time.h> #include <stdlib.h> #define PAGESIZE 4096 #define NO_OF_POINTERS 2 #define NO_OF_ITERATIONS 20 // change the following lines to test the real malloc and free #define MALLOC mymalloc #define FREE myfree typedef struct { unsigned long l,h; } ti; typedef struct { unsigned long sz,ml,tp,ap,tpg,apg,tv,av; } ms; #ifdef __cplusplus extern "C" { #endif unsigned long * _stdcall VirtualAlloc(void *,unsigned long,unsigned long,unsigned long); int _stdcall VirtualFree(void *,unsigned long,unsigned long); void _stdcall GlobalMemoryStatus(ms *); void * _stdcall GetCurrentProcess(void); unsigned long _stdcall GetVersion(void); int _stdcall GetProcessTimes(void *, ti *,ti *, ti *, ti *); void _stdcall Sleep(unsigned long); #ifdef __cplusplus } #endif int cputime(void) { // return cpu time used by current process ti ct,et,kt,ut; if(GetVersion()<0x80000000) { // are we running on NT/2000/XP GetProcessTimes(GetCurrentProcess(),&ct,&et,&kt,&ut); return (ut.l+kt.l)/10000; // include time in kernel } else return clock(); // for Windows 95/98/Me } int memory(void) { // return memory available to current process ms m; GlobalMemoryStatus(&m); return m.av; } // you are not allowed to change the following function void *allocpages(int n) { // allocate n pages and return start address return VirtualAlloc(0,n * PAGESIZE,4096+8192,4); } // you are not allowed to change the following function int freepages(void *p) { // free previously allocated pages. return VirtualFree(p,0,32768); } void *mymalloc(int n) { // very simple memory allocation void *p; p=allocpages((n/PAGESIZE)+1); if(!p) puts("Failed"); return p; } int myfree(void *p) { // very simple free int n; n=freepages(p); if(!n) puts("Failed"); return n; } unsigned seed=7652; int myrand() { // pick a random number seed=(seed*2416+374441)%1771875; return seed; } int randomsize() { // choose the size of memory to allocate int j,k; k=myrand(); j=(k&3)+(k>>2 &3)+(k>>4 &3)+(k>>6 &3)+(k>>8 &3)+(k>>10 &3); j=1<<j; return (myrand() % j) +1; } int main() { int i,k; int size; // used to store pointers to allocated memory unsigned char *n[NO_OF_POINTERS]; int s[5000]; // used to store sizes when testing int start_time; int start_mem; for(i=0;i<NO_OF_POINTERS;i++) { n[i]=0; // initially nothing is allocated } start_time=cputime(); start_mem=memory(); for(i=0;i<NO_OF_ITERATIONS;i++) { k=myrand()%NO_OF_POINTERS; // pick a pointer if(n[k]) { // if it was allocated then free it // check that the stuff we wrote has not changed if(n[k][0]!=(unsigned char)(n[k]+s[k]+k)) printf("Error when checking first byte!\n"); if(s[k]>1 && n[k][s[k]-1]!=(unsigned char)(n[k]-s[k]-k)) printf("Error when checking last byte!\n"); FREE(n[k]); } size=randomsize(); // pick a random size size=1; n[k]=(unsigned char *)MALLOC(size); // do the allocation s[k]=size; // remember the size n[k][0]=(unsigned char)(n[k]+s[k]+k); // put some data in the first and if(size>1) n[k][size-1]=(unsigned char)(n[k]-s[k]-k); // last byte } // print some statistics printf("That took %.3f seconds and used %d bytes\n", ((float)(cputime()-start_time))/1000, start_mem-memory()); return 1; } |
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDx0aW1lLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2RlZmluZSBQQUdFU0laRSA0MDk2CiNkZWZpbmUgTk9fT0ZfUE9JTlRFUlMgMgojZGVmaW5lIE5PX09GX0lURVJBVElPTlMgMjAKCi8vIGNoYW5nZSB0aGUgZm9sbG93aW5nIGxpbmVzIHRvIHRlc3QgdGhlIHJlYWwgbWFsbG9jIGFuZCBmcmVlCiNkZWZpbmUgTUFMTE9DIG15bWFsbG9jCiNkZWZpbmUgRlJFRSBteWZyZWUKdHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIGwsaDsgfSB0aTsKdHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHN6LG1sLHRwLGFwLHRwZyxhcGcsdHYsYXY7IH0gbXM7CiNpZmRlZiBfX2NwbHVzcGx1cwpleHRlcm4gIkMiIHsKI2VuZGlmCnVuc2lnbmVkIGxvbmcgKiBfc3RkY2FsbCBWaXJ0dWFsQWxsb2Modm9pZCAqLHVuc2lnbmVkIGxvbmcsdW5zaWduZWQgbG9uZyx1bnNpZ25lZCBsb25nKTsKaW50IF9zdGRjYWxsIFZpcnR1YWxGcmVlKHZvaWQgKix1bnNpZ25lZCBsb25nLHVuc2lnbmVkIGxvbmcpOwp2b2lkIF9zdGRjYWxsIEdsb2JhbE1lbW9yeVN0YXR1cyhtcyAqKTsKdm9pZCAqIF9zdGRjYWxsIEdldEN1cnJlbnRQcm9jZXNzKHZvaWQpOwp1bnNpZ25lZCBsb25nIF9zdGRjYWxsIEdldFZlcnNpb24odm9pZCk7CmludCBfc3RkY2FsbCBHZXRQcm9jZXNzVGltZXModm9pZCAqLCB0aSAqLHRpICosIHRpICosIHRpICopOwp2b2lkIF9zdGRjYWxsIFNsZWVwKHVuc2lnbmVkIGxvbmcpOwojaWZkZWYgX19jcGx1c3BsdXMKfQojZW5kaWYKCmludCBjcHV0aW1lKHZvaWQpIHsgLy8gcmV0dXJuIGNwdSB0aW1lIHVzZWQgYnkgY3VycmVudCBwcm9jZXNzCiAgIHRpIGN0LGV0LGt0LHV0OwogICBpZihHZXRWZXJzaW9uKCk8MHg4MDAwMDAwMCkgeyAgLy8gYXJlIHdlIHJ1bm5pbmcgb24gTlQvMjAwMC9YUAogICAgICBHZXRQcm9jZXNzVGltZXMoR2V0Q3VycmVudFByb2Nlc3MoKSwmY3QsJmV0LCZrdCwmdXQpOwogICAgICByZXR1cm4gKHV0Lmwra3QubCkvMTAwMDA7IC8vIGluY2x1ZGUgdGltZSBpbiBrZXJuZWwKICAgfQogICBlbHNlIHJldHVybiBjbG9jaygpOyAvLyBmb3IgV2luZG93cyA5NS85OC9NZQp9CmludCBtZW1vcnkodm9pZCkgeyAvLyByZXR1cm4gbWVtb3J5IGF2YWlsYWJsZSB0byBjdXJyZW50IHByb2Nlc3MKICAgbXMgbTsKICAgR2xvYmFsTWVtb3J5U3RhdHVzKCZtKTsKICAgcmV0dXJuIG0uYXY7Cn0KCi8vIHlvdSBhcmUgbm90IGFsbG93ZWQgdG8gY2hhbmdlIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb24Kdm9pZCAqYWxsb2NwYWdlcyhpbnQgbikgeyAvLyBhbGxvY2F0ZSBuIHBhZ2VzIGFuZCByZXR1cm4gc3RhcnQgYWRkcmVzcwogICByZXR1cm4gVmlydHVhbEFsbG9jKDAsbiAqIFBBR0VTSVpFLDQwOTYrODE5Miw0KTsKfQoKLy8geW91IGFyZSBub3QgYWxsb3dlZCB0byBjaGFuZ2UgdGhlIGZvbGxvd2luZyBmdW5jdGlvbgppbnQgZnJlZXBhZ2VzKHZvaWQgKnApIHsgLy8gZnJlZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBwYWdlcy4KICAgcmV0dXJuIFZpcnR1YWxGcmVlKHAsMCwzMjc2OCk7Cn0KCgp2b2lkICpteW1hbGxvYyhpbnQgbikgeyAvLyB2ZXJ5IHNpbXBsZSBtZW1vcnkgYWxsb2NhdGlvbgogICB2b2lkICpwOwogICBwPWFsbG9jcGFnZXMoKG4vUEFHRVNJWkUpKzEpOwogICBpZighcCkgcHV0cygiRmFpbGVkIik7CiAgIHJldHVybiBwOwp9CgppbnQgbXlmcmVlKHZvaWQgKnApIHsgLy8gdmVyeSBzaW1wbGUgZnJlZQogICBpbnQgbjsKICAgbj1mcmVlcGFnZXMocCk7CiAgIGlmKCFuKSBwdXRzKCJGYWlsZWQiKTsKICAgcmV0dXJuIG47Cn0KCnVuc2lnbmVkIHNlZWQ9NzY1MjsKCmludCBteXJhbmQoKSB7IC8vIHBpY2sgYSByYW5kb20gbnVtYmVyCiAgIHNlZWQ9KHNlZWQqMjQxNiszNzQ0NDEpJTE3NzE4NzU7CiAgIHJldHVybiBzZWVkOwp9CgppbnQgcmFuZG9tc2l6ZSgpIHsgLy8gY2hvb3NlIHRoZSBzaXplIG9mIG1lbW9yeSB0byBhbGxvY2F0ZQogICBpbnQgaixrOwogICBrPW15cmFuZCgpOwogICBqPShrJjMpKyhrPj4yICYzKSsoaz4+NCAmMykrKGs+PjYgJjMpKyhrPj44ICYzKSsoaz4+MTAgJjMpOwogICBqPTE8PGo7CiAgIHJldHVybiAobXlyYW5kKCkgJSBqKSArMTsKfQoKCmludCBtYWluKCkgewogICBpbnQgaSxrOwogICBpbnQgc2l6ZTsKCiAgIC8vIHVzZWQgdG8gc3RvcmUgcG9pbnRlcnMgdG8gYWxsb2NhdGVkIG1lbW9yeQogICB1bnNpZ25lZCBjaGFyICpuW05PX09GX1BPSU5URVJTXTsgCgogICBpbnQgc1s1MDAwXTsgLy8gdXNlZCB0byBzdG9yZSBzaXplcyB3aGVuIHRlc3RpbmcKCiAgIGludCBzdGFydF90aW1lOwogICBpbnQgc3RhcnRfbWVtOwoKICAgZm9yKGk9MDtpPE5PX09GX1BPSU5URVJTO2krKykgewogICAgICBuW2ldPTA7ICAgICAvLyBpbml0aWFsbHkgbm90aGluZyBpcyBhbGxvY2F0ZWQKICAgfQoKICAgc3RhcnRfdGltZT1jcHV0aW1lKCk7CiAgIHN0YXJ0X21lbT1tZW1vcnkoKTsKCiAgIGZvcihpPTA7aTxOT19PRl9JVEVSQVRJT05TO2krKykgewogICAgICBrPW15cmFuZCgpJU5PX09GX1BPSU5URVJTOyAvLyBwaWNrIGEgcG9pbnRlcgogICAgICBpZihuW2tdKSB7IC8vIGlmIGl0IHdhcyBhbGxvY2F0ZWQgdGhlbiBmcmVlIGl0CiAgICAgICAgIC8vIGNoZWNrIHRoYXQgdGhlIHN0dWZmIHdlIHdyb3RlIGhhcyBub3QgY2hhbmdlZAogICAgICAgICBpZihuW2tdWzBdIT0odW5zaWduZWQgY2hhcikobltrXStzW2tdK2spKQogICAgICAgICAgICBwcmludGYoIkVycm9yIHdoZW4gY2hlY2tpbmcgZmlyc3QgYnl0ZSFcbiIpOwogICAgICAgICBpZihzW2tdPjEgJiYgbltrXVtzW2tdLTFdIT0odW5zaWduZWQgY2hhcikobltrXS1zW2tdLWspKQogICAgICAgICAgICBwcmludGYoIkVycm9yIHdoZW4gY2hlY2tpbmcgbGFzdCBieXRlIVxuIik7CiAgICAgICAgIEZSRUUobltrXSk7CiAgICAgIH0KICAgICAgc2l6ZT1yYW5kb21zaXplKCk7IC8vIHBpY2sgYSByYW5kb20gc2l6ZQoJCXNpemU9MTsKICAgICAgbltrXT0odW5zaWduZWQgY2hhciAqKU1BTExPQyhzaXplKTsgLy8gZG8gdGhlIGFsbG9jYXRpb24KICAgICAgc1trXT1zaXplOyAvLyByZW1lbWJlciB0aGUgc2l6ZQogICAgICBuW2tdWzBdPSh1bnNpZ25lZCBjaGFyKShuW2tdK3Nba10rayk7ICAvLyBwdXQgc29tZSBkYXRhIGluIHRoZSBmaXJzdCBhbmQKICAgICAgaWYoc2l6ZT4xKSBuW2tdW3NpemUtMV09KHVuc2lnbmVkIGNoYXIpKG5ba10tc1trXS1rKTsgLy8gbGFzdCBieXRlCiAgIH0KCiAgIC8vIHByaW50IHNvbWUgc3RhdGlzdGljcwogICBwcmludGYoIlRoYXQgdG9vayAlLjNmIHNlY29uZHMgYW5kIHVzZWQgJWQgYnl0ZXNcbiIsCiAgICAgICAgICgoZmxvYXQpKGNwdXRpbWUoKS1zdGFydF90aW1lKSkvMTAwMCwKICAgICAgICAgc3RhcnRfbWVtLW1lbW9yeSgpKTsKCiAgIHJldHVybiAxOwp9
prog.c:16: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘VirtualAlloc’ prog.c:17: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘VirtualFree’ prog.c:18: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘GlobalMemoryStatus’ prog.c:19: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘GetCurrentProcess’ prog.c:20: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘GetVersion’ prog.c:21: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘GetProcessTimes’ prog.c:22: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘Sleep’ prog.c: In function ‘cputime’: prog.c:29: warning: implicit declaration of function ‘GetVersion’ prog.c:30: warning: implicit declaration of function ‘GetProcessTimes’ prog.c:30: warning: implicit declaration of function ‘GetCurrentProcess’ prog.c: In function ‘memory’: prog.c:37: warning: implicit declaration of function ‘GlobalMemoryStatus’ prog.c: In function ‘allocpages’: prog.c:43: warning: implicit declaration of function ‘VirtualAlloc’ prog.c:43: warning: return makes pointer from integer without a cast prog.c: In function ‘freepages’: prog.c:48: warning: implicit declaration of function ‘VirtualFree’ prog.c: In function ‘main’: prog.c:105: warning: cast from pointer to integer of different size prog.c:107: warning: cast from pointer to integer of different size prog.c:115: warning: cast from pointer to integer of different size prog.c:116: warning: cast from pointer to integer of different size
-
result: Compilation error (maybe you wish to see an example for C)


