חידה מהספר של stroustrup

עמוד
מוצגות 2 תגובות – 1 עד 2 (מתוך 2 סה״כ)
  • מאת
    תגובות
  • #77362

    הי… זאת חידה נחמדה (ולא קשה במיוחד) מעמוד 141 בספר
    the c++ programming language, של bjarne stroustrup.
    ולהלן הקוד:
    void send(int *to,int *from,int count)
    {
    int n=(count+7)/8;
    switch(cont%8){
    case 0: do{ *to++ = *from++;
    case 7: *to++ = *from++;
    case 6: *to++ = *from++;
    case 5: *to++ = *from++;
    case 4: *to++ = *from++;
    case 3: *to++ = *from++;
    case 2: *to++ = *from++;
    case 1: *to++ = *from++;
    } while (–n>0);

    }
    }

    מה הקוד הזה עושה? (וסליחה על הבלגן… קצת קשה לשמור על סדר עם המעבר מאנגלית לעברית)

    #79093
    דניאל ק
    משתתף

    כותרת: זה לא ממש מתאים להגדרה של חידה…
    אבל זה בהחלט קטע קוד מעניין…

    בכל מקרה, לולאה כזאת קיבלה את הכינוי
    Duff´s device
    על שם ממציאה כמובן…
    זה בעצם סוג של memcpy, שמנסה לשפר את הביצויים על פני לולאה שכל פעם מעתיקה בית יחיד(עוד מהימים שבהם קפיצה בקוד היו פוגעות באופן משמעותי בביצועים). אז מה זה עושה בעצם – מעתיק 8 בתים בבת אחת, כדי להקטין את מספר הקפיצות שצריך לבצע בזמן ההעתקה.

    השאלה הנשאלת היא מה עושים כשצריך להעתיק אזור בזכרון שגודלו איננו מתחלק ב8, וכאן בעצם הייחוד של הקוד…
    הSwitch מבצע קפיצה לאמצע הקוד, בהתאם לשארית Count % 8, ומשם והלאה מבצע לולאת do-while רגילה…

מוצגות 2 תגובות – 1 עד 2 (מתוך 2 סה״כ)
  • יש להתחבר למערכת על מנת להגיב.