c 記憶體測試
<code>01</code>
<code>#include <stdio.h></code>
<code>02</code>
<code>#include <stdlib.h></code>
<code>03</code>
<code>#include <unistd.h></code>
<code>04</code>
<code>#include <string.h></code>
<code>05</code>
<code>06</code>
<code>main( </code><code>int</code> <code>argc, </code><code>char</code> <code>** argv )</code>
<code>07</code>
<code>{</code>
<code>08</code>
<code> </code><code>char</code> <code>* ptest=0;</code>
<code>09</code>
<code> </code><code>long</code> <code>isize;</code>
<code>10</code>
<code> </code><code>if</code><code>( 2 == argc ){</code>
<code>11</code>
<code> </code><code>isize = </code><code>atoi</code><code>( argv[1] );</code>
<code>12</code>
<code> </code><code>}</code>
<code>13</code>
<code> </code><code>else</code><code>{</code>
<code>14</code>
<code> </code><code>printf</code><code>(</code><code>"usage: eatmem <size>\n"</code><code>;</code>
<code>15</code>
<code> </code><code>return</code> <code>1;</code>
<code>16</code>
<code>17</code>
<code>// if( null != ( ptest = (char*) malloc( isize*sizeof(char) )))</code>
<code>18</code>
<code> </code><code>if</code><code>( null != ( ptest = </code><code>new</code> <code>char</code><code>[ isize ] ))</code>
<code>19</code>
<code> </code><code>printf</code><code>( </code><code>"eat memory %ld\n"</code><code>, isize );</code>
<code>20</code>
<code> </code><code>else</code>
<code>21</code>
<code> </code><code>printf</code><code>( </code><code>"no such more memory!\n"</code> <code>);</code>
<code>22</code>
<code> </code><code>while</code><code>(1){</code>
<code>23</code>
<code> </code><code>memset</code><code>(ptest,0,isize);</code>
<code>24</code>
<code> </code><code>sleep(10);</code>
<code>25</code>
<code> </code><code>};</code>
<code>26</code>
<code>}</code>
先檢視系統的空閑記憶體 , 約 1.8g
# free
total used free shared buffers cached
mem: 2061652 194896 1866756 0 13872 23648
-/+ buffers/cache: 157376 1904276
swap: 4096312 141040 3955272
運作 eatmem 這個程式, 吃掉500m
./eatmem 500000000 &
再看系統的空閑記憶體, 少了500m 左右.
mem: 2061652 684476 1377176 0 14024 23648
-/+ buffers/cache: 646804 1414848
swap: 4096312 141036 3955276
退出eatmem 再看, 記憶體幾乎都回來了.
[root@l149 root]# free
mem: 2061652 195600 1866052 0 14064 23648
-/+ buffers/cache: 157888 1903764
又做了一下試驗....寫個2g 的檔案試試...
mem: 2061652 197080 1864572 0 14276 23648
-/+ buffers/cache: 159156 1902496
[root@l149 root]# dd if=/dev/zero of=2000m.file bs=10485760 count=200
200+0 records in
200+0 records out
mem: 2061652 2043584 18068 0 14332 1874308
-/+ buffers/cache: 154944 1906708
嘿嘿, 一寫完檔案, free memory 就沒有了.
有趣的是, 把這個檔案一删除, free memory 就又回來了.