How does Duff's device work?

前端 未结 11 1896
日久生厌
日久生厌 2020-11-22 04:56

I\'ve read the article on Wikipedia on the Duff\'s device, and I don\'t get it. I am really interested, but I\'ve read the explanation there a couple of times and I still do

11条回答
  •  执念已碎
    2020-11-22 05:31

    When I read it for the first time, I autoformatted it to this

    void dsend(char* to, char* from, count) {
        int n = (count + 7) / 8;
        switch (count % 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);
        }
    }
    

    and I had no idea what was happening.

    Maybe not when this question was asked, but now Wikipedia has a very good explanation

    The device is valid, legal C by virtue of two attributes in C:

    • Relaxed specification of the switch statement in the language's definition. At the time of the device's invention this was the first edition of The C Programming Language which requires only that the controlled statement of the switch be a syntactically valid (compound) statement within which case labels can appear prefixing any sub-statement. In conjunction with the fact that, in the absence of a break statement, the flow of control will fall-through from a statement controlled by one case label to that controlled by the next, this means that the code specifies a succession of count copies from sequential source addresses to the memory-mapped output port.
    • The ability to legally jump into the middle of a loop in C.

提交回复
热议问题