[問題] 優化問題(可能是::類別問題)(記憶體飆高
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
Microsoft Visual Studio 2005
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
許多,如有需要再補充
問題(Question):
記憶體飆高,目前有個解決方法,但不適合我要打的程式中
---
大家好,
我是程式新手,但我不畏懼爬文翻書,但這個問題我不知道從何下手,
希望各位能夠指點我,或是告訴我一些關鍵字或方向,
我手邊有一本Visual C++ 2010 的教學手冊
以下是我遇到的問題(關鍵問題我標記成紅色)
(或是看網頁版的:http://ideone.com/mJ5P7p )
網頁版內容有點差別,但要表達的意思相同
main
{
for(gen=1;gen<=600;gen++)
{
一些演算法();
}
統計等副程式();
其他東西等...
}
一些演算法()
{
繁複計算後算出100個sita;
for(i=1;i<=100;j++)
{
送出sita並給機器人();
}
}
送出sita並給機器人()
{
AL::ALMotionProxy motion("127.0.0.1", 9559); //連線機器人,但很像是類別宣告
AL::ALValue names = AL::ALValue::array("LHipPitch"); //宣告關節
AL::ALValue angles = AL::ALValue::array(sita);//給予角度
motion.setAngles(names, angles, fractionMaxSpeed);//讓機器人做指定角度
}
--
其中問題點就是每次送出一個角度
因為是在迴圈裡會做很多次,
就會連線一次,記憶體就會使用約300,000K以上
使用置底的方便看程式:http://ideone.com/mJ5P7p (迴圈內記憶體會飆高)
嘗試1:(目前唯一成功,但不適用)
但是如果不寫成副程式的副程式這樣子
全部寫成主程式
然後把AL::ALMotionProxy motion("127.0.0.1", 9559); 放在main的第一行(不在迴圈內
這樣子Compiled會過然後記憶體使用只會在3,000K~6,000K左右
但是全部丟在主程式裡面感覺很亂
(我現在打的是簡單例子,實際上我的演算法滿龐大的
使用置底的方便看程式:http://ideone.com/liECKl (放到迴圈外就不會飆高,但不適合)
嘗試2:(失敗)
如果單純把AL::ALMotionProxy motion("127.0.0.1", 9559);拉到main裡面
Compiled不會過,因為motion未宣告的識別項跟setAngles不是等位類別結構
使用置底的方便看程式:http://ideone.com/e7124M 不是全域宣告
嘗試3:(失敗)
有想過不修改程式單純把
AL::ALMotionProxy motion("127.0.0.1", 9559);
拉到main之外,當作全域宣告的感覺
Compiled會過,但是程式無法執行...
使用置底的方便看程式:http://ideone.com/UoDcVG (執行程式出問題)
所以我只好請教各位有什麼地方可以指點我...
或是告訴我我應該查詢哪些關鍵字
感謝各位幫忙
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.120.31.105
→
04/08 17:58, , 1F
04/08 17:58, 1F
恩對,那是將要傳的值要給哪個關節給寫出來,跟給多少寫出來,
給多少就是沿用計算出來的數值,在本文範例我是只給一個關節,所以就一個sita數值而已
主要可以看嘗試1,嘗試1可以解決問題,所以AL::ALValue::array方面是沒問題的
但只是不想要把所有程式都放在主程式中...因為這樣會超亂....應該很合理吧...
因為實際上他是在副程式的副程式中,
如果要全寫在主程式有些副程式可能要複製很多次...
→
04/08 18:14, , 2F
04/08 18:14, 2F
→
04/08 18:16, , 3F
04/08 18:16, 3F
→
04/08 18:18, , 4F
04/08 18:18, 4F
→
04/08 18:21, , 5F
04/08 18:21, 5F
我有試過class但是一樣會出現
motion未宣告的識別項跟setAngles不是等位類別結構
我寫的是像這樣,而且很像沒有連到IP,有點奇怪所以沒寫在我的嘗試裡面
http://ideone.com/OZxNgJ
另外你的方法可以解決我的問題,最後還是因為動態記憶體的問題....
爬文的時候有查到這個可能性
但是我當下沒有辦法與我發現的問題作連結...
總之感謝您摟~
如果不介意的話,是否能讓我知道您是怎麼思考的,讓我學會找出問題點
現在記憶體似乎解決了,套在我自己寫的小範例程式上執行是沒問題的,
然後套在另一個程式也沒有問題,
但是套在其中一個程式中有點問題跑到一半會直接錯誤....
找了一個晚上還沒找到問題
副程式隨便擺在某一行,有時候會出錯有時候不會...(Compiled都會過
推
04/08 19:57, , 6F
04/08 19:57, 6F
你是說class的嗎...如果是的話,我有發現...所以我就沒寫在嘗試裡了> <
→
04/08 22:10, , 7F
04/08 22:10, 7F
→
04/08 22:35, , 8F
04/08 22:35, 8F
但我使用的是Visual C++軟體來寫C++
這本書裡面講的應該也是C++,還是有點不懂差別在哪裡...
→
04/08 23:14, , 9F
04/08 23:14, 9F
→
04/08 23:15, , 10F
04/08 23:15, 10F
恩..可是我看他的函示庫範例都是寫在主程式,沒有寫在副程式的程式中...
→
04/08 23:15, , 11F
04/08 23:15, 11F
恩..是有點不熟悉,我只是大概知道程式的邏輯(大概吧)跟會用if else 跟for迴圈...
→
04/08 23:17, , 12F
04/08 23:17, 12F
恩...我也想看別人的code但是總是覺得簡單的code太簡單,本來就看得懂,
難的又太難...不會慢慢懂...雖然有在寫程式的過程中慢慢學會,但是有點慢...
依然還是只會if else for...> <
※ 編輯: converse0728 來自: 114.26.155.89 (04/09 00:38)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章