EDITChế độ xem tháo gỡ của mã phát hành C# 64 bit là dài hơn 75% so với mã gỡ lỗi 32 bit?
Tôi đã thử nghiệm bản phát hành ở 32 bit và mã nhỏ gọn. Vì vậy dưới đây là một vấn đề 64 bit.
Tôi đang sử dụng RC 2012 RC. Gỡ lỗi là 32 bit và Bản phát hành là 64 bit. Dưới đây là gỡ lỗi sau đó giải phóng tháo gỡ một dòng mã:
crc = (crc >> 8)^crcTable[((val & 0x0000ff00) >> 8)^crc & 0xff];
0000006f mov eax,dword ptr [ebp-40h]
00000072 shr eax,8
00000075 mov edx,dword ptr [ebp-3Ch]
00000078 mov ecx,0FF00h
0000007d and edx,ecx
0000007f shr edx,8
00000082 mov ecx,dword ptr [ebp-40h]
00000085 mov ebx,0FFh
0000008a and ecx,ebx
0000008c xor edx,ecx
0000008e mov ecx,dword ptr ds:[03387F38h]
00000094 cmp edx,dword ptr [ecx+4]
00000097 jb 0000009E
00000099 call 6F54F5EC
0000009e xor eax,dword ptr [ecx+edx*4+8]
000000a2 mov dword ptr [ebp-40h],eax
-----------------------------------------------------------------------------
crc = (crc >> 8)^crcTable[((val & 0x0000ff00) >> 8)^crc & 0xff];
000000a5 mov eax,dword ptr [rsp+20h]
000000a9 shr eax,8
000000ac mov dword ptr [rsp+38h],eax
000000b0 mov rdx,124DEE68h
000000ba mov rdx,qword ptr [rdx]
000000bd mov eax,dword ptr [rsp+00000090h]
000000c4 and eax,0FF00h
000000c9 shr eax,8
000000cc mov ecx,dword ptr [rsp+20h]
000000d0 and ecx,0FFh
000000d6 xor eax,ecx
000000d8 mov ecx,eax
000000da mov qword ptr [rsp+40h],rdx
000000df mov rax,qword ptr [rsp+40h]
000000e4 mov rax,qword ptr [rax+8]
000000e8 mov qword ptr [rsp+48h],rcx
000000ed cmp qword ptr [rsp+48h],rax
000000f2 jae 0000000000000100
000000f4 mov rax,qword ptr [rsp+48h]
000000f9 mov qword ptr [rsp+48h],rax
000000fe jmp 0000000000000105
00000100 call 000000005FA5D364
00000105 mov rax,qword ptr [rsp+40h]
0000010a mov rcx,qword ptr [rsp+48h]
0000010f mov ecx,dword ptr [rax+rcx*4+10h]
00000113 mov eax,dword ptr [rsp+38h]
00000117 xor eax,ecx
00000119 mov dword ptr [rsp+20h],eax
Tất cả mã bổ sung trong phiên bản 64 bit là gì? Nó đang thử nghiệm cái gì? Tôi đã không benchmarked này, nhưng mã 32 bit nên thực hiện nhanh hơn nhiều.
EDIT
Toàn bộ chức năng:
public static uint CRC32(uint val)
{
uint crc = 0xffffffff;
crc = (crc >> 8)^crcTable[(val & 0x000000ff)^crc & 0xff];
crc = (crc >> 8)^crcTable[((val & 0x0000ff00) >> 8)^crc & 0xff];
crc = (crc >> 8)^crcTable[((val & 0x00ff0000) >> 16)^crc & 0xff];
crc = (crc >> 8)^crcTable[(val >> 24)^crc & 0xff];
// flip bits
return (crc^0xffffffff);
}
Nó sẽ giúp xem toàn bộ chức năng, không chỉ là một dòng của nó. –
Cố gắng so sánh các khác biệt khi được xây dựng để gỡ lỗi và bản phát hành khác không hợp lệ. So sánh ít nhất cùng một loài (debug/debug hoặc release/release). –
@KenWhite Tôi đồng ý. Nhưng đó là một thực tế rằng gỡ lỗi là nhỏ gọn hơn mà thu hút sự chú ý của tôi, cộng với việc kiểm tra thực tế phát hành thêm. – IamIC