C'est un assemblage d'erreur en effet. x64, .net 4.7.1, version validée.
démontage:
for(int i = 0; i < N - Old.Length; i++)
00007FF942690ADD xor eax,eax
for(int i = 0; i < N - Old.Length; i++)
00007FF942690ADF mov ebx,esi
00007FF942690AE1 sub ebx,ebp
00007FF942690AE3 test ebx,ebx
00007FF942690AE5 jle 00007FF942690AFF
dd[i] = d;
00007FF942690AE7 mov rdx,qword ptr [rdi]
00007FF942690AEA cmp eax,dword ptr [rdx+8]
00007FF942690AED jae 00007FF942690B11
00007FF942690AEF movsxd rcx,eax
00007FF942690AF2 vmovsd qword ptr [rdx+rcx*8+10h],xmm6
for(int i = 0; i < N - Old.Length; i++)
00007FF942690AF9 inc eax
00007FF942690AFB cmp ebx,eax
00007FF942690AFD jg 00007FF942690AE7
00007FF942690AFF vmovaps xmm6,xmmword ptr [rsp+20h]
00007FF942690B06 add rsp,30h
00007FF942690B0A pop rbx
00007FF942690B0B pop rbp
00007FF942690B0C pop rsi
00007FF942690B0D pop rdi
00007FF942690B0E pop r14
00007FF942690B10 ret
La question est à l'adresse 00007FF942690AFD, le jg 00007FF942690AE7. Il saute en arrière si ebx (qui contient 4, la fin de la boucle de la valeur) est plus grande (jg) que eax, la valeur que j'ai. Cette échoue lorsqu'il est 4 bien sûr, afin de ne pas écrire le dernier élément dans le tableau.
Il ne parvient pas, parce que c'inc j'ai de la valeur de registre (eax, à 0x00007FF942690AF9), et vérifie ensuite avec ses 4, mais il a encore à écrire cette valeur. C'est un peu dur pour localiser exactement où se situe le problème, qu'il regarde comme il pourrait être le résultat de l'optimisation de la (N-Vieux.La longueur), que la version debug contient que du code, mais la version release precalculates que. Donc, c'est pour le jit personnes à fixer ;)