<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 403, comments - 310, trackbacks - 0, articles - 7
      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    原來(lái)GCC是支持尾遞歸的遞推優(yōu)化的

    Posted on 2008-05-24 02:05 ZelluX 閱讀(2444) 評(píng)論(1)  編輯  收藏 所屬分類: C/C++

    水木上有人貼了個(gè)有趣的程序

    #include? < stdlib.h >
    #include?
    < stdio.h >

    void ?print_forever( int ?n)
    {
    ????printf(
    " %d\n " ,?n);
    ????print_forever(n?
    + ? 1 );
    }


    int ?main( int ?argc,? char ? * argv[])
    {
    ????print_forever(
    0 );
    ????
    return ? 0 ;
    }


    用gcc -O2編譯運(yùn)行后會(huì)不停地打印從0開(kāi)始的自然數(shù),注意如果編譯器沒(méi)有做優(yōu)化的話,打印到某個(gè)數(shù)的時(shí)候肯定會(huì)發(fā)生棧溢出從而程序終止的情況,但這個(gè)程序卻能一直運(yùn)行下去,說(shuō)明編譯器做了尾遞歸優(yōu)化。

    用gcc -O2 -S生成這個(gè)程序的匯編代碼后證實(shí)了這一點(diǎn)。
    .L6:
    ????????movl????
    %ebx,?4(%esp)
    ????????addl????$
    1,?%ebx
    ????????movl????$.LC0,?(
    %esp)
    ????????call????printf
    ????????jmp?????.L6
    print_forever的關(guān)鍵部分被優(yōu)化成了一個(gè)n不斷增加的死循環(huán)。

    接下來(lái)是分析哪個(gè)優(yōu)化選項(xiàng)處理了尾遞歸。

    用O3 O2 O1三個(gè)優(yōu)化強(qiáng)度編譯程序,查看匯編代碼后,發(fā)現(xiàn)尾遞歸優(yōu)化是O2中新增的功能。于是查看O2新開(kāi)啟的優(yōu)化開(kāi)關(guān):
    gcc -c -Q -O1 --help=optimizers > /tmp/O1-opts
    gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts
    diff /tmp/O2-opts /tmp/O1-opts?| grep enabled
    輸出結(jié)果:

    經(jīng)證實(shí)是-foptimize-sibling-calls這個(gè)選項(xiàng)實(shí)現(xiàn)了尾遞歸的優(yōu)化,具體內(nèi)容可以參看
    http://gcc.gnu.org./ml/gcc-patches/2000-03/msg00867.html

    評(píng)論

    # re: 原來(lái)GCC是支持尾遞歸的遞推優(yōu)化的  回復(fù)  更多評(píng)論   

    2013-09-02 22:37 by darkhorse
    我在ubuntu下面匯編的結(jié)果是:

    print_forever:
    pushl %ebp
    movl %esp, %ebp
    pushl %ebx
    subl $20, %esp
    movl 8(%ebp), %ebx
    .p2align 4,,7
    .p2align 3

    怎么跟你的不一樣?
    主站蜘蛛池模板: 亚洲无成人网77777| 亚洲情XO亚洲色XO无码| 亚洲一区二区三区高清不卡| 亚洲国产AV无码专区亚洲AV| 一级毛片免费在线观看网站| 亚洲精品无码激情AV| 亚洲人成人77777在线播放| 香港经典a毛片免费观看看| 最近免费中文字幕大全高清大全1 最近免费中文字幕mv在线电影 | 亚洲日本国产综合高清| 二个人看的www免费视频| 亚洲午夜福利717| 午夜不卡久久精品无码免费| 亚洲自偷精品视频自拍| 国产1024精品视频专区免费| 精品亚洲一区二区| 蜜桃成人无码区免费视频网站| 亚洲免费一区二区| 免费无码作爱视频| 亚洲色图综合网站| 免费看的黄色大片| 一级毛片在线完整免费观看| 久久精品国产亚洲网站| 无码区日韩特区永久免费系列| 亚洲午夜成人精品无码色欲| 免费在线精品视频| 国内少妇偷人精品视频免费| 亚洲国产美女精品久久久久| 日本免费一区二区三区最新vr| 国产成人精品免费视频大全| 亚洲乱码无码永久不卡在线 | 最近最好的中文字幕2019免费| 亚洲a∨无码精品色午夜| 男女免费观看在线爽爽爽视频| 亚洲人xxx日本人18| 亚洲一本大道无码av天堂| 久9这里精品免费视频| 亚洲va久久久久| 亚洲色婷婷六月亚洲婷婷6月| 1000部禁片黄的免费看| 视频一区在线免费观看|