Soci (Soczó Zsolt) szakmai blogja

2007.04.25.

Érdekes kód

Filed under: C#,Szakmai élet — Soczó Zsolt @ 09:54

Fordul ez a kód? Csinál valamit?

[source:c++]
int c = 8;
char b[] = ” “;
char alma[] = “almaalma”;
char* a = alma;

switch (c % 8)
{
case 0: do { *b = *a++;
case 7: *b = *a++;
case 6: *b = *a++;
case 5: *b = *a++;
case 4: *b = *a++;
case 3: *b = *a++;
case 2: *b = *a++;
case 1: *b = *a++;
} while ((c -= 8) > 0);
}
[/source]

9 Comments

  1. >Fordul ez a kód?
    Remélem, nem! ;-)
    Honnan szedted?

    Comment by SebDani — 2007.04.25. @ 12:21

  2. Majd elmondom, de egyelőre még várom, más mit szól hozzá.

    Comment by Soczó Zsolt — 2007.04.25. @ 12:35

  3. Szornyusegesen nez ki, de fordul, sot! mukodik. http://en.wikipedia.org/wiki/Duff's_device

    Comment by mviktor — 2007.04.25. @ 14:30

  4. Magamtól szörnyülködtem. Megnéztem a Wikin…
    …s ilyenkor mindig rájövök mennyire nem is értek a programozáshoz. El kéne mennem favágónak.
    Hogy futottál bele?

    Comment by Rétikánya — 2007.04.25. @ 14:45

  5. Ezek után kíváncsi lennék a memcpy implementációjára…

    Comment by GerleiM — 2007.04.25. @ 19:50

  6. Ebben az esetben szívesen rácsapnék a kezére annak aki azt a fordítót írta, amin ez lefordul.
    Szerintem már a QBasic is szólt, ha Goto-val egy ciklusmagba akart az ember fia (kívülről) ugrani…

    Comment by SebDani — 2007.04.26. @ 07:34

  7. […] Előzmény. […]

    Pingback by Soci blog » Blog Archive » Még egyszer az érdekes kódról — 2007.04.26. @ 10:20

  8. Linuxon nem lehet megetetni…

    merlin ~ # gcc -c duff.c
    duff.c:6: error: syntax error before "switch"
    merlin ~ #

    És

    merlin ~ # gcc -c duff.cpp
    duff.cpp:6: error: expected unqualified-id before "switch"
    merlin ~ # mv duff.cpp duff.c

    Bár érdekes, hogy minden formában a switch előtt jelez hibát, nem pedig a do belsejében. Hmmm…

    Comment by hrongyorgy — 2007.04.28. @ 10:47

  9. Ez az egyik legfontosabb optimalizációs eljárás, ami kihasználja a proci pipeline-t, 50-70 % os gyorsulást okoz. Érdemes megjegyezni. Ha tudjuk, hogy a tömb mérete pl. 5-el osztható, akkor nem kell ilyen csúnya kód :)

    Amúgy nem csúnya, a switch utasítása specifikációja volt annó elcseszve.
    C#-ben kötelező a break :)

    Comment by agysejt — 2007.05.20. @ 10:01

RSS feed for comments on this post.

Sorry, the comment form is closed at this time.

Powered by WordPress