cuihao
(崔灏)
1
无聊尝试:
#include <stdio.h>
int count=0;
int main ()
{
printf("%d\n", ++count);
return main();
}
gcc,不优化或O1优化,溢出了:
1
2
......
523526
523527
[1] 16952 segmentation fault ./a.out
加O2或O3优化就死循环了,不会栈溢出呢。
原因是gcc太智能了,发现了我的企图,就把死递归改成死循环了。摘取gcc生成的汇编代码片段:
.L2:
movl count(%rip), %esi
movl $.LC0, %edi
xorl %eax, %eax
addl $1, %esi
movl %esi, count(%rip)
call printf
jmp .L2
cjxgm
(兰威举)
2
代码优化好神奇 :em06
话说我到 261792 就溢出了 :em19
现在的高中生真都不得了…败汇编牛人… :em70
话说我今年才高中毕业,却只会C++和Python… :em19
cjxgm
(兰威举)
4
[attachment=0]snap2.png[/attachment]
某表示汇编不难 :em09
cuihao
(崔灏)
5
:em20 某表示其实不怎么会汇编,懂一点基础,能凑合着看而已。
LS的系统编程吗?完全不懂耶。
cjxgm
(兰威举)
6
本来是想写OS的
但越写越觉得麻烦
“已经有 Linux 了,我再写个OS好干嘛”
于是就放弃了
xtricman
(炸鱼薯条·德里克)
9
不懂汇编,但是我一般不使用优化,总觉得还是凭本事自己写更好的代码比较好。编译器优化觉得好不靠谱阿。
依云
(lilydjwg)
11
我见过有个不使用条件语句打印 1-1000 整数的程序,就是用的 main 递归。
你说的OS是Operation SYSTEM嘛?
我也想写 但是不会
但是不知到递归main有什么用啊
没啥不靠谱。基本上就是优化下运算,处理变量的方式、循环、分支跳转和缓存经常使用的值(gcse?)。反正觉得自己动手优化未必有编译器优化的好,起码我做不到T T
当然过早的优化是万恶之源,原来的程序有问题或不划算的优化怎么优化都是浪费