上課時候好像很多人有發生一個情形:
就是程式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
我在工作管理員中看到的記憶體使用量都一樣
不會像之前一樣與時間成正比= =
1 則留言:
allocate*
張貼留言