想请教一个关于 c 访问内存的问题?

2015-11-03 21:04:45 +08:00
 xiaoxiaoyang
c 程序
int a=4;
int i,j;
for (i=0;i<32;i++)
{
j=1<<i;
if( ( a & j ) ==j)
{
break;
}
}


当跳出循环时,怎样判断 for 循环里访问内存的次数
2537 次点击
所在节点    Linux
10 条回复
aheadlead
2015-11-03 21:09:13 +08:00
要考虑 cache 的吗?
wsy2220
2015-11-03 21:16:22 +08:00
很可能一次都不需要,因为这几个变量寄存器就能放下。得看编译以后的汇编代码.
xiaoxiaoyang
2015-11-03 21:18:22 +08:00
@aheadlead
那如果把 cpu+cache 算一个整体的话,访问内存次数?
kkhaike
2015-11-03 21:19:48 +08:00
你要说不考虑任何优化
xiaoxiaoyang
2015-11-03 21:21:48 +08:00
@wsy2220
如果程序大的话呢,看访问几次是不是只能看汇编代码呢?
或者只有特定汇编指令才会去访问内存呢?求指点
xiaoxiaoyang
2015-11-03 21:24:40 +08:00
@kkhaike
如果不优化,有没有方法可以确定呢?
wsy2220
2015-11-03 21:29:07 +08:00
@xiaoxiaoyang 要确定实际访问了几次只能看汇编...
kkhaike
2015-11-03 21:32:10 +08:00
你问的问题和回答都很奇怪。。
第一个回答。难道不是一个整体?
第二个回答。意义在哪里?
第三个回答。就算不优化也只是理论上的推测,但看你的问题完全就是想“测定”这个东西。
你到低腰干啥?
xiaoxiaoyang
2015-11-03 21:38:44 +08:00
@kkhaike
就是想尝试看看,如果程序很大的话,那个 for 循环里的代码访问内存的次数。
Cu635
2015-11-03 22:13:07 +08:00
lz ,你这是在写作业么?

这个问题一般是 benchmark 时候分析性能针对性的优化时候需要的,这个场景下是要考虑寄存器和缓存的,访存就是指访问主内存。做性能分析解决性能瓶颈。

如果说这是在学习计算机组成原理或者 C 语言的时候的作业,你得去问问老师到底是在什么前提下考虑问题。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/233367

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX