作者Carbontube (碳管)
看板C_and_CPP
标题[问题] 请问如何重复使用记忆体空间?
时间Tue Mar 10 19:11:18 2009
该是很基本的问题,就是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
1F:推 ledia:把 real *yInterp = new real(n);这行移到function外面 03/10 19:14
2F:→ ledia:我偏要说偏要说 XD 03/10 19:15
3F:→ hpeter:我也是这样想@@ 用全域有什麽不好的吗?不用一直malloc free 03/10 19:16
4F:→ hpeter:空间换时间~ 很正常的XD 03/10 19:17
5F:→ hpeter:如果 nx 有上限或是固定值的话 就简单多了 03/10 19:17
6F:→ Carbontube:nx是故定的。。所以才问记忆体是否能重复用。。 03/10 19:19
7F:→ hpeter:当然 real *yInterp = new real(n);这行移到function外 03/10 19:19
8F:→ hpeter:compile 不会过XD 03/10 19:19
9F:→ hpeter:固定的话 在init时就malloc好 以後就传ptr + length 03/10 19:20
10F:→ Carbontube:楼上,这样不就是把real *yInterp = new real(n)移到外 03/10 19:21
11F:→ hpeter:实作上 移到function外 compile 会过吗@@? 03/10 19:22
12F:→ hpeter:固定的话用全域 + #define MAX_NX 也不错XD 03/10 19:22
13F:→ Carbontube:当然要改成call by ref,不过我意思是说 不要在外面 03/10 19:23
14F:→ Carbontube:配记忆体,这样外面会一堆new XXX 看很不顺眼 03/10 19:23
15F:→ hpeter:#define MAX_NX (10L); static real sRealItem[MAX_NL]; 03/10 19:25
16F:→ hpeter:XD 03/10 19:25
17F:推 ledia:看不顺眼跟效率的取舍, 看你自己了 03/10 19:46
18F:→ mellean:那外面有delete或free就不会不顺眼了吗? ~"~ 03/11 02:08