递归main

无聊尝试:

#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

代码优化好神奇 :em06
话说我到 261792 就溢出了 :em19

现在的高中生真都不得了…败汇编牛人… :em70

话说我今年才高中毕业,却只会C++和Python… :em19

[attachment=0]snap2.png[/attachment]
某表示汇编不难 :em09

:em20 某表示其实不怎么会汇编,懂一点基础,能凑合着看而已。
LS的系统编程吗?完全不懂耶。

本来是想写OS的
但越写越觉得麻烦
“已经有 Linux 了,我再写个OS好干嘛”
于是就放弃了

:em21 看来我还得继续努力

:em19 :em19 :em19
。。。

不懂汇编,但是我一般不使用优化,总觉得还是凭本事自己写更好的代码比较好。编译器优化觉得好不靠谱阿。

这帖子是论坛开张第三天的帖子…

我见过有个不使用条件语句打印 1-1000 整数的程序,就是用的 main 递归。

你说的OS是Operation SYSTEM嘛?
我也想写 但是不会
但是不知到递归main有什么用啊

呀!!这个真的没看时间,抱歉了。。。

没啥不靠谱。基本上就是优化下运算,处理变量的方式、循环、分支跳转和缓存经常使用的值(gcse?)。反正觉得自己动手优化未必有编译器优化的好,起码我做不到T T
当然过早的优化是万恶之源,原来的程序有问题或不划算的优化怎么优化都是浪费