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
|
<pre>
<font color="#0000ff">// Copyright (c) 2002 David Muse</font>
<font color="#0000ff">// See the file COPYING for more information</font>
<font color="#a020f0">#include </font><font color="#ff00ff"><rudiments/memorypool.h></font>
<font color="#a020f0">#include </font><font color="#ff00ff"><stdio.h></font>
<font color="#a020f0">#ifdef RUDIMENTS_NAMESPACE</font>
<font color="#a52a2a"><b>using</b></font> <font color="#2e8b57"><b>namespace</b></font> rudiments;
<font color="#a020f0">#endif</font>
<font color="#2e8b57"><b>int</b></font> main(<font color="#2e8b57"><b>int</b></font> argc, <font color="#2e8b57"><b>const</b></font> <font color="#2e8b57"><b>char</b></font> **argv) {
memorypool *mp=<font color="#a52a2a"><b>new</b></font> memorypool(<font color="#ff00ff">32</font>,<font color="#ff00ff">16</font>,<font color="#ff00ff">10</font>);
printf(<font color="#ff00ff">"first run...</font><font color="#6a5acd">\n</font><font color="#ff00ff">"</font>);
<font color="#a52a2a"><b>for</b></font> (<font color="#2e8b57"><b>int</b></font> i=<font color="#ff00ff">0</font>; i<<font color="#ff00ff">20</font>; i++) {
<font color="#2e8b57"><b>char</b></font> *segment=(<font color="#2e8b57"><b>char</b></font> *)mp->malloc(<font color="#ff00ff">6</font>);
<font color="#a52a2a"><b>for</b></font> (<font color="#2e8b57"><b>int</b></font> j=<font color="#ff00ff">0</font>; j<<font color="#ff00ff">6</font>; j++) {
segment[j]=(<font color="#2e8b57"><b>char</b></font>)<font color="#ff00ff">'a'</font>+i;
}
}
mp->print();
printf(<font color="#ff00ff">"free...</font><font color="#6a5acd">\n</font><font color="#ff00ff">"</font>);
mp->free();
mp->print();
printf(<font color="#ff00ff">"second run...</font><font color="#6a5acd">\n</font><font color="#ff00ff">"</font>);
<font color="#2e8b57"><b>char</b></font> *segment=(<font color="#2e8b57"><b>char</b></font> *)mp->malloc(<font color="#ff00ff">40</font>);
<font color="#a52a2a"><b>for</b></font> (<font color="#2e8b57"><b>int</b></font> j=<font color="#ff00ff">0</font>; j<<font color="#ff00ff">40</font>; j++) {
segment[j]=<font color="#ff00ff">'z'</font>;
}
<font color="#a52a2a"><b>for</b></font> (<font color="#2e8b57"><b>int</b></font> i=<font color="#ff00ff">0</font>; i<<font color="#ff00ff">20</font>; i++) {
<font color="#2e8b57"><b>char</b></font> *segment=(<font color="#2e8b57"><b>char</b></font> *)mp->malloc(<font color="#ff00ff">6</font>);
<font color="#a52a2a"><b>for</b></font> (<font color="#2e8b57"><b>int</b></font> j=<font color="#ff00ff">0</font>; j<<font color="#ff00ff">6</font>; j++) {
segment[j]=(<font color="#2e8b57"><b>char</b></font>)<font color="#ff00ff">'a'</font>+i;
}
}
<font color="#a52a2a"><b>for</b></font> (<font color="#2e8b57"><b>int</b></font> i=<font color="#ff00ff">0</font>; i<<font color="#ff00ff">20</font>; i++) {
<font color="#2e8b57"><b>char</b></font> *segment=(<font color="#2e8b57"><b>char</b></font> *)mp->malloc(<font color="#ff00ff">2</font>);
<font color="#a52a2a"><b>for</b></font> (<font color="#2e8b57"><b>int</b></font> j=<font color="#ff00ff">0</font>; j<<font color="#ff00ff">6</font>; j++) {
segment[j]=(<font color="#2e8b57"><b>char</b></font>)<font color="#ff00ff">'A'</font>+i;
}
}
mp->print();
printf(<font color="#ff00ff">"free...</font><font color="#6a5acd">\n</font><font color="#ff00ff">"</font>);
mp->free();
mp->print();
printf(<font color="#ff00ff">"short/long/float/double...</font><font color="#6a5acd">\n</font><font color="#ff00ff">"</font>);
<font color="#2e8b57"><b>short</b></font> *sp=(<font color="#2e8b57"><b>short</b></font> *)mp->malloc(<font color="#a52a2a"><b>sizeof</b></font>(<font color="#2e8b57"><b>short</b></font>));
<font color="#2e8b57"><b>long</b></font> *lp=(<font color="#2e8b57"><b>long</b></font> *)mp->malloc(<font color="#a52a2a"><b>sizeof</b></font>(<font color="#2e8b57"><b>long</b></font>));
<font color="#2e8b57"><b>float</b></font> *fp=(<font color="#2e8b57"><b>float</b></font> *)mp->malloc(<font color="#a52a2a"><b>sizeof</b></font>(<font color="#2e8b57"><b>float</b></font>));
<font color="#2e8b57"><b>double</b></font> *dp=(<font color="#2e8b57"><b>double</b></font> *)mp->malloc(<font color="#a52a2a"><b>sizeof</b></font>(<font color="#2e8b57"><b>double</b></font>));
*sp=<font color="#ff00ff">1</font>;
*lp=<font color="#ff00ff">1</font>;
*fp=<font color="#ff00ff">1.1</font>;
*dp=<font color="#ff00ff">1.1</font>;
printf(<font color="#ff00ff">"sp: </font><font color="#6a5acd">%d</font><font color="#ff00ff"> lp: </font><font color="#6a5acd">%ld</font><font color="#ff00ff"> "</font>,*sp,*lp);
printf(<font color="#ff00ff">"fp: </font><font color="#6a5acd">%f</font><font color="#ff00ff"> dp: </font><font color="#6a5acd">%f</font><font color="#ff00ff"> </font><font color="#6a5acd">\n</font><font color="#ff00ff">"</font>,*fp,*dp);
mp->print();
printf(<font color="#ff00ff">"free...</font><font color="#6a5acd">\n</font><font color="#ff00ff">"</font>);
mp->free();
mp->print();
printf(<font color="#ff00ff">"short/long/float/double arrays...</font><font color="#6a5acd">\n</font><font color="#ff00ff">"</font>);
<font color="#2e8b57"><b>short</b></font> *spa=(<font color="#2e8b57"><b>short</b></font> *)mp->malloc(<font color="#a52a2a"><b>sizeof</b></font>(<font color="#2e8b57"><b>short</b></font>)*<font color="#ff00ff">10</font>);
<font color="#2e8b57"><b>long</b></font> *lpa=(<font color="#2e8b57"><b>long</b></font> *)mp->malloc(<font color="#a52a2a"><b>sizeof</b></font>(<font color="#2e8b57"><b>long</b></font>)*<font color="#ff00ff">10</font>);
<font color="#2e8b57"><b>float</b></font> *fpa=(<font color="#2e8b57"><b>float</b></font> *)mp->malloc(<font color="#a52a2a"><b>sizeof</b></font>(<font color="#2e8b57"><b>float</b></font>)*<font color="#ff00ff">10</font>);
<font color="#2e8b57"><b>double</b></font> *dpa=(<font color="#2e8b57"><b>double</b></font> *)mp->malloc(<font color="#a52a2a"><b>sizeof</b></font>(<font color="#2e8b57"><b>double</b></font>)*<font color="#ff00ff">10</font>);
<font color="#a52a2a"><b>for</b></font> (<font color="#2e8b57"><b>int</b></font> i=<font color="#ff00ff">0</font>; i<<font color="#ff00ff">10</font>; i++) {
spa[i]=i;
lpa[i]=i;
fpa[i]=i+((<font color="#2e8b57"><b>float</b></font>)i/<font color="#ff00ff">10.0</font>);
dpa[i]=i+((<font color="#2e8b57"><b>float</b></font>)i/<font color="#ff00ff">10.0</font>);
}
<font color="#a52a2a"><b>for</b></font> (<font color="#2e8b57"><b>int</b></font> i=<font color="#ff00ff">0</font>; i<<font color="#ff00ff">10</font>; i++) {
printf(<font color="#ff00ff">"sp: </font><font color="#6a5acd">%d</font><font color="#ff00ff"> lp: </font><font color="#6a5acd">%ld</font><font color="#ff00ff"> "</font>,spa[i],lpa[i]);
printf(<font color="#ff00ff">"fp: </font><font color="#6a5acd">%f</font><font color="#ff00ff"> dp: </font><font color="#6a5acd">%f</font><font color="#ff00ff"> </font><font color="#6a5acd">\n</font><font color="#ff00ff">"</font>,fpa[i],dpa[i]);
}
mp->print();
printf(<font color="#ff00ff">"free...</font><font color="#6a5acd">\n</font><font color="#ff00ff">"</font>);
mp->free();
mp->print();
<font color="#a52a2a"><b>delete</b></font> mp;
mp=<font color="#a52a2a"><b>new</b></font> memorypool(<font color="#ff00ff">32</font>,<font color="#ff00ff">16</font>,<font color="#ff00ff">10</font>);
<font color="#a52a2a"><b>for</b></font> (<font color="#2e8b57"><b>int</b></font> i=<font color="#ff00ff">0</font>; i<<font color="#ff00ff">10</font>; i++) {
<font color="#2e8b57"><b>unsigned</b></font> <font color="#2e8b57"><b>long</b></font> total=<font color="#ff00ff">0</font>;
<font color="#a52a2a"><b>for</b></font> (<font color="#2e8b57"><b>unsigned</b></font> <font color="#2e8b57"><b>long</b></font> j=<font color="#ff00ff">0</font>; j<<font color="#ff00ff">11</font>; j++) {
total=total+i+j;
mp->malloc(i+j);
mp->free();
}
printf(<font color="#ff00ff">"should be: </font><font color="#6a5acd">%ld</font><font color="#6a5acd">\n</font><font color="#ff00ff">"</font>,total/<font color="#ff00ff">11</font>);
mp->print();
}
<font color="#a52a2a"><b>delete</b></font> mp;
}
</pre>
|