c语言-下面两段程序片,其执行效率有区别码?在实际代码中会选用哪一段,为什么?

问题描述

下面两段程序片,其执行效率有区别码?在实际代码中会选用哪一段,为什么?

其实就是在执行两层for循环的循环体中,for循环调换位置是否对效率有影响?
如下:
代码段一:
for(row=5;--row>=0;)
for(col=100;--col>=0;)
sum=sum+a[row][col];
代码段二:
for(col=100;--col>=0;)
for(row=5;--row>=0;)
sum=sum+a[row][col];

本人小白,望大神们指教。

解决方案

现代的处理器有L1 L2 L3等高速缓存,a[row][col]在内存中的排列是,相同row的第二维数组排列在一起。所以代码段1命中缓存的概率更高,效率要好。
但是这取决于你的数组的大小,以及具体的处理器。

解决方案二:

看起来都差不多,感觉没区别的样子。

解决方案三:

一的局部性好于二。一行中的元素是顺序存储的。但是,估计对效率的影响可以忽略。都在内存中访问很快。

解决方案四:

第一种可能更好,但是你的数据那么少,影响不大

解决方案五:

第一种是按内存顺序访问的,应该会快点,这个数据量不大,没什么影响。如果数据量大的时候我认为第一种效率更高点

解决方案六:

其执行效率有区别码?在实际代码中会选用哪一段,为什么?

解决方案七:

第一种是按内存顺序访问的,应该会快点

解决方案八:

显然是代码一
符合计算机存储思维,按行来。

解决方案九:

看着差不多,数据少的话应该都一样吧

时间: 2024-11-08 19:20:41

c语言-下面两段程序片,其执行效率有区别码?在实际代码中会选用哪一段,为什么?的相关文章

两个程序同步的设计模式

问题描述 有这样一个需求,两个程序的用户数据库做一个同步,比如程序A的用户密码修改,程序B的密码也要同步修改,同理,程序A修改密码,程序B的密码也要修改,因为设计太多的修改信息,虽然都是基于用户这个class,但是程序耦合性太高,有什么样的设计模式呢? 问题补充:AngelAndAngel 写道 解决方案 观察者模式确实可行 但是这个模式带来的负面效应也比较大,我推荐lz用尽可能直观的方式实现.数据库同步的话 其实可以用触发器的.解决方案二:观察者模式解决方案三:1.A.B两段程序改的是同一个表

输出-求用c语言编写这么一段程序

问题描述 求用c语言编写这么一段程序 1.用随机产生n个整数,赋给a数组 2.从小到大排序 3.计算最小数的阶乘 4.输出数组内容 解决方案 这个不难,就是先随机n个数放到数组再对数组排序,然后对数组第一个数求阶乘输出,最后输出整个排序过的数组,一步步来很简单 解决方案二: 参考代码段:https://github.com/707wk/Senior-middle-school/blob/master/Filling%20in%20the%20gaps.c 解决方案三: 你需要什么样的排序方式?最

链表-请教:(C语言学生信息管理)程序函数里好像直接跳过了某一段代码执行

问题描述 请教:(C语言学生信息管理)程序函数里好像直接跳过了某一段代码执行 void Student_Searchself(STUDENT *head) //此函数是为了显示学生的各科成绩和各科排名 //(head)存储学生成绩的链表头指针{STUDENT *p*m*e*y*l;STUDENT *p1*p2*p3*p4;char s[6];system(""cls"");printf(""请输入本人学号来查找n"");sca

c语言-求教两个C语言程序fseek(fp,0L,0)和rewind(fp)区别

问题描述 求教两个C语言程序fseek(fp,0L,0)和rewind(fp)区别 程序一:#include main() { FILE fp; int i,a[6]={1,2,3,4,5,6},k; fp=fopen("data.dat","w+"); for(i=0;i<6;i++) { fseek(fp,0L,0); _ _ fprintf(fp,"%dn",a[i]);__ } rewind(fp); _ fscanf(fp,&qu

帮我看看这两段程序

问题描述 importjavax.microedition.lcdui.Alert;importjavax.microedition.lcdui.AlertType;importjavax.microedition.lcdui.Command;importjavax.microedition.lcdui.CommandListener;importjavax.microedition.lcdui.Display;importjavax.microedition.lcdui.Displayable

c语言-关于double型和int型的问题,两种程序运行结果不同

问题描述 关于double型和int型的问题,两种程序运行结果不同 #includeint main(){ int i; double sumk=1; for(i=1sum=0;i<=1000;i++) { sum+=k/i; k*=-1; } printf(""%lfn""sum); return 0;} #includeint main(){ int ik=1; double sum; for(i=1sum=0;i<=1000;i++) { sum+

c语言-这段程序问题在哪里,编译后的结果让我很费解

问题描述 这段程序问题在哪里,编译后的结果让我很费解 #include #include int main() { float x,y,z,k; char s,q; printf("请输入加油量:n"); scanf("%f",&x); printf("请输入服务类型:n"); printf("a.自己加n"); printf("b.自助加n"); scanf("%c",&

c语言问题-大家好,下面这段程序在vc6.0中编译时没错误,但却运行不起来。麻烦帮看一下

问题描述 大家好,下面这段程序在vc6.0中编译时没错误,但却运行不起来.麻烦帮看一下 #include #include int main() { int shu,shang,i,yushu; int a[16]={0}; clrscr(); printf("shu ru yi ge shu shi jin zhin "); scanf("%d",shu); for(i=0;i { yushu=shu%2; shang=shu/2; a[i]=yushu; shu

C语言之多线程机制(程序可以同时被执行而不会相互干扰)

接触过linux的人或多或少知道,linux有多线程的机制,也就是说程序可以同时执行,不受干扰,关于这个在我以前的博文里有过类似模拟的时间片轮转程序,跟这个其实是类似的.其实在window上,线程的头文件也是可以包含进来使用的,我这里用DevC++这个软件来测试,看看运行效果就知道了,接下来我们简单介绍一下线程接口.       那么什么是线程呢?      线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中