Results 1 to 5 of 5

Thread: increment or decrement ?

  1. #1
    Senior Member
    Join Date
    Jul 2004
    Location
    Bangkok
    Posts
    187


    increment or decrement ?

    มีคำถามมาให้คิดกันให้ดูว่า source code ข้างล่างสองอันคิดว่าอันไหนเร็วกว่า

    1.
    [code]

    for (int idx = 0; idx < 100; ++idx)


  2. #2
    Administrator asylu3's Avatar
    Join Date
    Jun 2000
    Location
    Thailand
    Posts
    3,557


    Re: increment or decrement ?

    คิดว่าเป็นอันแรกนะครับเพราะ architecture ของ CPU น่าจะทำการบวกเลขได้เร็วกว่าการลบ (จากวิชา computer architecture)
    แต่จากที่ลองใน C++ แล้ว Big O เท่ากันผมไม่เห็นว่ามันจะต่างเลย
    ลองเขียน assembly ดูแล้วก็ได้ประมาณนี้ครับ

    [src]
    ===Increase========
    mov eax,dword ptr [ebp-4]
    add eax,1
    mov dword ptr [ebp-4],eax
    cmp dword ptr [ebp-4],0Ah
    jge main+32h (00401042)
    jmp main+21h (00401031)


    ===Descrease========
    mov ecx,dword ptr [ebp-4]
    sub ecx,1
    mov dword ptr [ebp-4],ecx
    cmp dword ptr [ebp-4],0
    jle main+4Ch (0040105c)
    jmp main+3Bh (0040104b)
    [/src]

  3. #3
    Senior Member
    Join Date
    Jul 2004
    Location
    Bangkok
    Posts
    187


    Re: increment or decrement ?

    เฉลย
    ----------

    Decrement จะเร็วกว่า เพราะว่าตรง condition loop

    ถ้าเป็น Increment เทียบกับตัวเลข 1 ตัว (มีการลบ 1 ครั้ง)
    ในขณะที่ Decrement ไม่ต้องเทียบกับตัวเลข (ใช้ jz) แค่ดูว่าเป็น 0 หรือไม่ จึงเร็วกว่า ด้วยประการชะนี้


    ง่ายๆก็คือแบบ increment ต้อง cmp แต่ decrement ใช้ test ax, ax เร็วกว่า

  4. #4
    Administrator asylu3's Avatar
    Join Date
    Jun 2000
    Location
    Thailand
    Posts
    3,557


    Re: increment or decrement ?

    ขอบคุณครับ

  5. #5
    Anonymous
    Guest


    Re: increment or decrement ?

    ใช่ครับ decrement เร็วกว่า แต่สิ่งสำคัญที่สุดสำหรับเขียนโปรแกรมคือ ให้คนเข้าใจครับ โปรแกรมๆนึงเดี๋ยวนี้ซับซ้อนเกินกว่าจำทำด้วยตัวคนเดียวแล้ว
    code ที่ดีต้องสามารถนำมา reuse ได้ นั่นรวมถึงการ maintenance และการ track bug ด้วย
    ทุกวันนี้ speed cpu ก็เร็วมากแล้ว เพราะงั้น programmer ที่ดีควรจะคำนึงถึงเรื่องพวกนี้ด้วยนะครับ

    ยกตัวอย่าง for(int i=count;--i>=0

Members who have read this thread : 0

Actions : (View-Readers)

There are no names to display.

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •