免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: yunlong9981
打印 上一主题 下一主题

[C] 循环优化 -- 不变量外提 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2008-08-16 09:26 |只看该作者
原帖由 converse 于 2008-8-15 11:37 发表
好的编译器会帮你做这个优化的.LZ试试用O2级别去编译程序再看看汇编码.



我用的是O3级的汇编。
正常情况下,C编译器无法做到判断函数是否为不变量,并在循环中外提,但编译器对表达式是否为不变量的归纳能力很强。GCC在O3编译时加入选项-finline-functions, 将部分函数inline化;从而将对一个函数的调用转换为对多个表达式的调用,并进行不变量优化;但是优化的能力也有限。
因此写代码时,还是最好进行人工优化。

论坛徽章:
0
12 [报告]
发表于 2008-08-16 09:32 |只看该作者
原帖由 xi2008wang 于 2008-8-15 18:04 发表
空间换时间
使用len = strlen(buf);多用了一个变量


这并非空间换时间;而是彻底的空间+时间的优化。
for( i = 0; i < strlen(buf); i++ ); --- 每次调用时候都需要建立函数堆栈,函数返回堆栈还原等
函数堆栈, 调用函数的时间,空间代价都比一个变量高多了。

论坛徽章:
0
13 [报告]
发表于 2008-08-16 10:08 |只看该作者
原帖由 yunlong9981 于 2008-8-16 09:32 发表


这并非空间换时间;而是彻底的空间+时间的优化。
for( i = 0; i < strlen(buf); i++ ); --- 每次调用时候都需要建立函数堆栈,函数返回堆栈还原等
函数堆栈, 调用函数的时间,空间代价都比一个变量高多了。

俺是来学习的

论坛徽章:
0
14 [报告]
发表于 2008-08-16 11:28 |只看该作者

公式是最快的,不是么。

int main(int argc, char **argv)
{
    char    buf[1024];
    int    len = 0;

    len = strlen( buf );
    return len * (len - 1);
}

论坛徽章:
0
15 [报告]
发表于 2008-08-16 15:18 |只看该作者
原帖由 blizzard213 于 2008-8-15 23:51 发表

4个字节能对性能造成影响?
讨论至此已经没有任何意义

当然会有影响,32位和64位,相同么

论坛徽章:
0
16 [报告]
发表于 2008-08-16 17:26 |只看该作者
原帖由 qliu00 于 2008-8-16 15:18 发表

当然会有影响,32位和64位,相同么


你哪跟哪啊?
我是说节约了4字节的栈空间对程序的性能会有多大提高???

麻烦你回答别人的帖子时动动脑经 什么32位 64位?? 莫名其妙!

论坛徽章:
0
17 [报告]
发表于 2008-08-16 17:36 |只看该作者
4字节的栈空间不是32位么, 老大,麻烦去重新学计算机

论坛徽章:
0
18 [报告]
发表于 2008-08-16 17:37 |只看该作者
原帖由 qliu00 于 2008-8-16 17:36 发表
4字节的栈空间不是32位么, 老大,麻烦去重新学计算机


口水战有意义?
我是问你 你说的32位和64位 和讨论的问题有什么联系??

论坛徽章:
0
19 [报告]
发表于 2008-08-16 17:38 |只看该作者
原帖由 qliu00 于 2008-8-16 17:36 发表
4字节的栈空间不是32位么, 老大,麻烦去重新学计算机


老大,麻烦去重新学计算机
===================
这种话麻烦你不要乱说, 你是不是想讨骂?
我再问你一遍

论坛徽章:
0
20 [报告]
发表于 2008-08-16 17:39 |只看该作者
当然有关系,4字节的栈空间你能全功能比得上8字节栈空间么
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP