2009年5月22日 星期五

記億體空間不夠!

上課時候好像很多人有發生一個情形:

就是程式run到一半會產生一個Message說 "記憶體存放空間不足"

然後程式就掛掉了

這個問題在於說我們的CallBack function中有寫到說會去new 一塊 Type 為Bitmap的空間

Graphics::TBitmap *BackGround30=new Graphics::TBitmap();

大小為..320*240*24=1843200(Byte) =1.8 (MByte)

1.8MB對於我們動輒2G以上的PC來說看起來實在是冰山一角

但是

我們的CallBack是每當WebCam有data進來的時候就會去跑一次

每跑一次就allcate了1.8MB(以上)的空間

而我們每秒大概會處理10張以上的畫面..

也就是10 * 1.8MB= 18 MB....每秒配置了這麼大的記憶體

就算你的Ram是 4G跑個222秒也滿了=3=

上面都是廢話,重點來了

要如何避免這個問題呢?

記不記得以前老師有教過一個從來沒用過的Function叫"delete()"

以我的程式來講,我new了一塊記憶體的名稱叫做BackGround30

我只要在適當的地方下 delete(BackGround30)

讓我的CallBack 每次要結束的時候記得把 記憶體給 release出來

這樣不管跑幾次CallBack

我在工作管理員中看到的記憶體使用量都一樣

不會像之前一樣與時間成正比= =