[问题] array的定义放循环里面或外面比较有效率?

楼主: eagle32 (バスケがしたいです)   2014-12-17 11:35:02
问题:
考量程式的效率或其他层面,
array 或 vector 的定义放在循环里面比较好还是外面比较好?
譬如: 我有一个array在每loop一次之前需要重新归零,哪个做法比较好?
ps. 我不是资工相关背景
for(int n=0; n < N; n++)
{
double array[500]={0.0};
...
...
...
}
double array[500]
for(int n=0; n < N; n++)
{
memset(array, 0.0, 500*sizeof(double)); // 归零
...
...
...
}
作者: tjjh89017 (伊达政宗)   2014-12-17 11:47:00
如果compiler处理得好,两者效率会差不多
作者: loveme00835 (发箍)   2014-12-17 13:29:00
你测过执行时间了吗
作者: longlongint (华哥尔)   2014-12-17 13:42:00
locality 二维或多维阵列比较容易出问题 一维阵列就推一楼
楼主: eagle32 (バスケがしたいです)   2014-12-17 15:37:00
没有测过时间. 想说也许只要观念正确答案应该是很明显的.locality是什么? 重要吗?
作者: cjcat2266 (CJ Cat)   2014-12-17 16:03:00
locality of reference指的是存取各笔资料在内存的相邻性,在同一个cache line的相邻资料会同时被加载到快取内存,加速软件方的存取速度所以以线性方式存取资料,会比随机存取资料有效率这也是为什么 for(i=0~N)for(j=0~N)array2D[i][j]的写法会比 for(i=0~N)for(j=0~N)array2D[j][i] 理想locality挺重要,写程式的同时最好谨记这个概念囉嗦完了,你用的是一维阵列,看起来也是在for循环里面存取,能够线性存取就线性存取
楼主: eagle32 (バスケがしたいです)   2014-12-17 16:26:00
谢谢你们的指教 我没有楼上讲的观念你说的线性存取就是顺着内存位置读取 避免跳来跳去对吧通常我需要塞一个多维的array 或 vector 到循环里面
作者: kwpn (ITSST)   2014-12-18 13:13:00
测试也很重要,即使观念让你认为第2种效率较好,但是好多少呢?若只好一点点,对你整体程式影响几乎可忽略,那应考选择维护上比较好的

Links booklink

Contact Us: admin [ a t ] ucptt.com