[問題] 請問如何重複使用記憶體空間?

看板C_and_CPP (C/C++)作者 (碳管)時間16年前 (2009/03/10 19:11), 編輯推噓2(2016)
留言18則, 4人參與, 最新討論串1/1
該是很基本的問題,就是function中的array空間想重負使用,要怎處理呢? 有 array *y,長度 n 入 function linearInterp做線性內插為長度nx的yInterp ,這步驟做很多次: #define real double real *yInterp; for(int i =0;i< M;i++) { : //(一些計算 得到y) : yInterp = linearInterp(n,nx,y); : //把yInterp存起來 free(yInterp); }//for real *linearInterp(int n, int nx, real *y) { real *yInterp = new real[nx]; : //把y做線性內插,並存成yInterp : return yInterp; }//linearInterp 這樣做是沒有問題,但yInterp這array一直在那開開關關,會讓速度慢下不少 我嘗試將real *yInterp = new real[nx]; 這行前面加上static 字樣 並將 free(yInterp)移到迴圈外面,卻會造成crash。 請問要怎寫才可讓記憶體空間重複使用而不開開關關呢? (請不要說把 real *yInterp = new real(n);這行移到function外面。。) 謝謝。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.216.82.2

03/10 19:14, , 1F
把 real *yInterp = new real(n);這行移到function外面
03/10 19:14, 1F

03/10 19:15, , 2F
我偏要說偏要說 XD
03/10 19:15, 2F

03/10 19:16, , 3F
我也是這樣想@@ 用全域有什麼不好的嗎?不用一直malloc free
03/10 19:16, 3F

03/10 19:17, , 4F
空間換時間~ 很正常的XD
03/10 19:17, 4F

03/10 19:17, , 5F
如果 nx 有上限或是固定值的話 就簡單多了
03/10 19:17, 5F

03/10 19:19, , 6F
nx是故定的。。所以才問記憶體是否能重複用。。
03/10 19:19, 6F

03/10 19:19, , 7F
當然 real *yInterp = new real(n);這行移到function外
03/10 19:19, 7F

03/10 19:19, , 8F
compile 不會過XD
03/10 19:19, 8F

03/10 19:20, , 9F
固定的話 在init時就malloc好 以後就傳ptr + length
03/10 19:20, 9F

03/10 19:21, , 10F
樓上,這樣不就是把real *yInterp = new real(n)移到外
03/10 19:21, 10F

03/10 19:22, , 11F
實作上 移到function外 compile 會過嗎@@?
03/10 19:22, 11F

03/10 19:22, , 12F
固定的話用全域 + #define MAX_NX 也不錯XD
03/10 19:22, 12F

03/10 19:23, , 13F
當然要改成call by ref,不過我意思是說 不要在外面
03/10 19:23, 13F

03/10 19:23, , 14F
配記憶體,這樣外面會一堆new XXX 看很不順眼
03/10 19:23, 14F

03/10 19:25, , 15F
#define MAX_NX (10L); static real sRealItem[MAX_NL];
03/10 19:25, 15F

03/10 19:25, , 16F
XD
03/10 19:25, 16F

03/10 19:46, , 17F
看不順眼跟效率的取捨, 看你自己了
03/10 19:46, 17F

03/11 02:08, , 18F
那外面有delete或free就不會不順眼了嗎? ~"~
03/11 02:08, 18F
文章代碼(AID): #19jahNxX (C_and_CPP)
文章代碼(AID): #19jahNxX (C_and_CPP)