返回信息流char cvalue;
char *cp = "test";
char c[10] = "test";
那么 cvalue = cp[0]; 和 cvalue = c[0]; 哪个效率高些?
多谢!
这是一条镜像帖。来源:北邮人论坛 / cpp / #44655同步于 2010/10/11
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
求教:从字符数组和字符串指针中取值 语句哪个快?
nightelf
2010/10/11镜像同步9 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
是不是char *cp = "test";这个快些?指针指向的是静态区?
但是感觉这个没有可比性吧,好像在循环取值的时候指针快些。
【 在 nightelf 的大作中提到: 】
: char cvalue;
: char *cp = "test";
: char c[10] = "test";
: ...................
cvalue = cp[0];
movl 12(%esp), %eax
movzbl (%eax), %eax
movb %al, 17(%esp)
cvalue = c[0];
movzbl 18(%esp), %eax
movb %al, 17(%esp)
应该是第二种快的。地一种要先将静态区的地址读进来。
个人第一印象是:
一个数组就是一个地址,一个指针就是一个地址的地址
那么,使用指针,需要多一次的访存,效率应该慢于数组的方式(这个楼我第一次回帖就是这样回复的,但是这个答案,不完全正确,于是重新回复了一下)
而通常的说法是:
在编写数组算法时,使用指针比使用数组“更有效率”
for循环 a[i]=1; *(p++)=1; }
原因可能是是这样吧,使用数组时: a[i] 编译器需要计算每次前进的步长,在数组形式中,每次是步长因子乘以i加数组地址,有一次乘法运算
p++ 编译器需要计算每次前进的步长,在指针形式中,每次是步长因子乘以1加 地址,相比上面,少了一次乘法
所谓的效率,应该就是这样吧?
而现实的情况是这样的:
在现代的优化编译器的编译下,一堆数组和指针引用所产生的代码,并不具有显著的差别,或者根本汇编代码就是一样的。
----------------------------------------------------------
在楼主的具体问题的情景中:
char cvalue;
char *cp = "test";
char c[10] = "test";
cvalue = cp[0]; 和 cvalue = c[0]; 这个也没涉及循环什么的,应该是数组形式的更有效率一点点吧,指针的会多一次访存。
【 在 zxsword 的大作中提到: 】
: 个人第一印象是:
: 一个数组就是一个地址,一个指针就是一个地址的地址
: 那么,使用指针,需要多一次的访存,效率应该慢于数组的方式(这个楼我第一次回帖就是这样回复的,但是这个答案,不完全正确,于是重新回复了一下)
: ...................
威武