Sorry, the list wouldn&#39;t post my accidental double paste anyhow because it was too big.  Here&#39;s the disassembly of partition, showing only back() is getting called and pred seems to be getting inlined, contrary to what I had believed before.  So changing enforce() in back() to assert() gets rid of about half the overhead, but I have no idea where the other half is coming from.<br>
<br><span style="font-family: courier new,monospace;">_D3std9algorithm129__T8sortImplS793std10functional54__T13binaryFunImplVAyaa5_61203c2062VAyaa1_610889BE3F182A6EA5575A2D298A20D100 PROC NEAR</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">;  COMDEF _D3std9algorithm129__T8sortImplS793std10functional54__T13binaryFunImplVAyaa5_61203c2062VAyaa1_610889BE3F182A6EA5575A2D298A20D100</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        sub     esp, 36                                 ; 0000 _ 83. EC, 24</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">        mov     ecx, dword ptr [esp+2CH]                ; 0003 _ 8B. 4C 24, 2C</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        push    ebx                                     ; 0007 _ 53</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">        mov     ebx, dword ptr [esp+2CH]                ; 0008 _ 8B. 5C 24, 2C</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        test    ebx, ebx                                ; 000C _ 85. DB</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">        push    ebp                                     ; 000E _ 55</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        push    esi                                     ; 000F _ 56</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">        mov     esi, eax                                ; 0010 _ 89. C6</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        push    edi                                     ; 0012 _ 57</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">        jnz     ?_020                                   ; 0013 _ 75, 0E</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        pop     edi                                     ; 0015 _ 5F</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">        mov     eax, ebx                                ; 0016 _ 8B. C3</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        mov     edx, ecx                                ; 0018 _ 8B. D1</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">        pop     esi                                     ; 001A _ 5E</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        pop     ebp                                     ; 001B _ 5D</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">        pop     ebx                                     ; 001C _ 5B</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        add     esp, 36                                 ; 001D _ 83. C4, 24</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">        ret     8                                       ; 0020 _ C2, 0008</span><br style="font-family: courier new,monospace;">
<br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">?_020:  mov     dword ptr [esp+3CH], ecx                ; 0023 _ 89. 4C 24, 3C</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        mov     edx, dword ptr [esp+3CH]                ; 0027 _ 8B. 54 24, 3C</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">        mov     dword ptr [esp+38H], ebx                ; 002B _ 89. 5C 24, 38</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        mov     ebx, dword ptr [esp+38H]                ; 002F _ 8B. 5C 24, 38</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">        mov     dword ptr [esp+14H], ebx                ; 0033 _ 89. 5C 24, 14</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        mov     dword ptr [esp+18H], edx                ; 0037 _ 89. 54 24, 18</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">        cmp     dword ptr [esp+38H], 0                  ; 003B _ 83. 7C 24, 38, 00</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        je      ?_023                                   ; 0040 _ 0F 84, 00000088</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">?_021:  mov     edx, dword ptr [esp+3CH]                ; 0046 _ 8B. 54 24, 3C</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        mov     eax, dword ptr [esp+38H]                ; 004A _ 8B. 44 24, 38</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">        mov     ebx, dword ptr [edx]                    ; 004E _ 8B. 1A</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        push    dword ptr [esi+0CH]                     ; 0050 _ FF. 76, 0C</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">        push    dword ptr [esi+8H]                      ; 0053 _ FF. 76, 08</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        mov     dword ptr [esp+18H], edx                ; 0056 _ 89. 54 24, 18</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">        call    _D3std5array12__T4backTAiZ4backFNcAiZi  ; 005A _ E8, 00000000(rel)</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        cmp     dword ptr [eax], ebx                    ; 005F _ 39. 18</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">        jle     ?_022                                   ; 0061 _ 7E, 31</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        mov     edi, dword ptr [esp+38H]                ; 0063 _ 8B. 7C 24, 38</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">        mov     ecx, dword ptr [esp+10H]                ; 0067 _ 8B. 4C 24, 10</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        dec     edi                                     ; 006B _ 4F</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">        lea     edx, [ecx+4H]                           ; 006C _ 8D. 51, 04</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        mov     ebx, dword ptr [esp+14H]                ; 006F _ 8B. 5C 24, 14</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">        dec     ebx                                     ; 0073 _ 4B</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        mov     dword ptr [esp+3CH], edx                ; 0074 _ 89. 54 24, 3C</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">        mov     edx, dword ptr [esp+18H]                ; 0078 _ 8B. 54 24, 18</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        mov     eax, dword ptr [esp+14H]                ; 007C _ 8B. 44 24, 14</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">        mov     dword ptr [esp+38H], edi                ; 0080 _ 89. 7C 24, 38</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        add     edx, 4                                  ; 0084 _ 83. C2, 04</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">        mov     dword ptr [esp+14H], ebx                ; 0087 _ 89. 5C 24, 14</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        mov     dword ptr [esp+18H], edx                ; 008B _ 89. 54 24, 18</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">        jmp     ?_025                                   ; 008F _ E9, 000000AA</span><br style="font-family: courier new,monospace;">
<br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">?_022:  push    dword ptr [esp+3CH]                     ; 0094 _ FF. 74 24, 3C</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        push    dword ptr [esp+3CH]                     ; 0098 _ FF. 74 24, 3C</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">        call    _D3std5array12__T4backTAiZ4backFNcAiZi  ; 009C _ E8, 00000000(rel)</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        mov     ebx, dword ptr [eax]                    ; 00A1 _ 8B. 18</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">        push    dword ptr [esi+0CH]                     ; 00A3 _ FF. 76, 0C</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        push    dword ptr [esi+8H]                      ; 00A6 _ FF. 76, 08</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">        call    _D3std5array12__T4backTAiZ4backFNcAiZi  ; 00A9 _ E8, 00000000(rel)</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        cmp     dword ptr [eax], ebx                    ; 00AE _ 39. 18</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">        jg      ?_024                                   ; 00B0 _ 7F, 2E</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        mov     edi, dword ptr [esp+38H]                ; 00B2 _ 8B. 7C 24, 38</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">        dec     edi                                     ; 00B6 _ 4F</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        mov     eax, dword ptr [esp+38H]                ; 00B7 _ 8B. 44 24, 38</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">        mov     dword ptr [esp+38H], edi                ; 00BB _ 89. 7C 24, 38</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        mov     edx, dword ptr [esp+3CH]                ; 00BF _ 8B. 54 24, 3C</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">        mov     dword ptr [esp+3CH], edx                ; 00C3 _ 89. 54 24, 3C</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        cmp     dword ptr [esp+38H], 0                  ; 00C7 _ 83. 7C 24, 38, 00</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">        jnz     ?_022                                   ; 00CC _ 75, C6</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">?_023:  mov     edx, dword ptr [esp+18H]                ; 00CE _ 8B. 54 24, 18</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">        mov     eax, dword ptr [esp+14H]                ; 00D2 _ 8B. 44 24, 14</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        pop     edi                                     ; 00D6 _ 5F</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">        pop     esi                                     ; 00D7 _ 5E</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        pop     ebp                                     ; 00D8 _ 5D</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">        pop     ebx                                     ; 00D9 _ 5B</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        add     esp, 36                                 ; 00DA _ 83. C4, 24</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">        ret     8                                       ; 00DD _ C2, 0008</span><br style="font-family: courier new,monospace;">
<br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">?_024:  push    dword ptr [esp+3CH]                     ; 00E0 _ FF. 74 24, 3C</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        push    dword ptr [esp+3CH]                     ; 00E4 _ FF. 74 24, 3C</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">        call    _D3std5array12__T4backTAiZ4backFNcAiZi  ; 00E8 _ E8, 00000000(rel)</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        mov     edi, eax                                ; 00ED _ 89. C7</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">        mov     edx, dword ptr [esp+3CH]                ; 00EF _ 8B. 54 24, 3C</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        mov     ebp, edx                                ; 00F3 _ 89. D5</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">        mov     eax, dword ptr [esp+38H]                ; 00F5 _ 8B. 44 24, 38</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">; Note: Zero displacement could be omitted</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">        mov     ecx, dword ptr [edx]                    ; 00F9 _ 8B. 4A, 00</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        mov     ebx, dword ptr [edi]                    ; 00FC _ 8B. 1F</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">        lea     edx, [edx+4H]                           ; 00FE _ 8D. 52, 04</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        mov     dword ptr [ebp], ebx                    ; 0101 _ 89. 5D, 00</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">        mov     eax, dword ptr [esp+38H]                ; 0104 _ 8B. 44 24, 38</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        dec     eax                                     ; 0108 _ 48</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">        mov     dword ptr [edi], ecx                    ; 0109 _ 89. 0F</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        mov     ebx, dword ptr [esp+14H]                ; 010B _ 8B. 5C 24, 14</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">        mov     ecx, dword ptr [esp+18H]                ; 010F _ 8B. 4C 24, 18</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        mov     dword ptr [esp+38H], eax                ; 0113 _ 89. 44 24, 38</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">        dec     ebx                                     ; 0117 _ 4B</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        mov     eax, dword ptr [esp+14H]                ; 0118 _ 8B. 44 24, 14</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">        mov     dword ptr [esp+14H], ebx                ; 011C _ 89. 5C 24, 14</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        add     ecx, 4                                  ; 0120 _ 83. C1, 04</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">        mov     ebx, dword ptr [esp+38H]                ; 0123 _ 8B. 5C 24, 38</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        mov     dword ptr [esp+18H], ecx                ; 0127 _ 89. 4C 24, 18</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">        dec     ebx                                     ; 012B _ 4B</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        mov     eax, dword ptr [esp+38H]                ; 012C _ 8B. 44 24, 38</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">        mov     dword ptr [esp+3CH], edx                ; 0130 _ 89. 54 24, 3C</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        mov     ecx, edx                                ; 0134 _ 8B. CA</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">        mov     dword ptr [esp+38H], ebx                ; 0136 _ 89. 5C 24, 38</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        mov     dword ptr [esp+3CH], ecx                ; 013A _ 89. 4C 24, 3C</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">?_025:  cmp     dword ptr [esp+38H], 0                  ; 013E _ 83. 7C 24, 38, 00</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        jne     ?_021                                   ; 0143 _ 0F 85, FFFFFEFD</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">; Note: Immediate operand could be made smaller by sign extension</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        jmp     ?_023                                   ; 0149 _ E9, FFFFFF80</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">_D3std9algorithm129__T8sortImplS793std10functional54__T13binaryFunImplVAyaa5_61203c2062VAyaa1_610889BE3F182A6EA5575A2D298A20D100 ENDP</span><br>
<br><div class="gmail_quote">On Fri, Jul 2, 2010 at 5:25 PM, David Simcha <span dir="ltr">&lt;<a href="mailto:dsimcha@gmail.com">dsimcha@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
Sorry for the double paste.  Please ignore everything before the second time you see <span style="font-family: courier new,monospace;">_D3std9algorithm129__T8sortImplS793std10functional54__T13binaryFunImplVAyaa5_61203c2...</span>
</blockquote></div><br>