라이브러리: DLL 없는 파일 매핑 - 페이지 12

 
감사합니다, 수고하셨습니다.
 

엄청난 양의 데이터(기가바이트)를 전송해야 했습니다. 안타깝게도 이 라이브러리를 통한 구현은 매우 낮은 성능을 보였습니다.

원본 DLL 세트를 사용하여 완전히 다시 실행해야 했습니다. 빠르게 작동했습니다.

 
이 트릭이 누군가에게 어떻게 작동했는지 놀랍습니다. 아래는 CMemMapApi::Write()의 일부분입니다. ArrayResize(src, size); memcpyX(src, view, size); // 바이트버퍼를 가져온 for(int i=0; i
 

안타깝게도 파일 매핑에는 한 가지 중요한 단점이 있습니다. 자식 애플리케이션(데이터 읽기)이 어떤 이유로 작업을 올바르게 완료하지 못한 경우 ( kernel32 ::UnmapViewOfFilekernel32::CloseHandle 호출) , "파일"은 열린 위치의 모든 프로세스가 닫힐 때까지 (kernel32::OpenFileMappingWkernel32::MapViewOfFile 호출) 메모리에 매달린 상태로 남아있을 수 있습니다. 특히 크기를 변경할 수 없으며 다시 열 수 없습니다(닫았다가 다시 열기).


문제에 대한 해결책을찾지 못했습니다. 이 라이브러리의 모든 작업은 여는 것으로 시작하여 닫는 것으로 끝나기 때문에 이러한 상황이 발생하기 어렵습니다. 이것이 느린 이유입니다. 그러나 여전히이 오류가 발생할 수 있습니다. 그러면 MQL 프로그램이이 메시지와 함께 충돌합니다.

Access violation at 0x00007FF988234593 write to 0x0000021D17D87000 in 'msvcrt.dll'
              00007 FF9882343C0 488 BC1            mov        rax, rcx
              00007 FF9882343C3 4983 F808          cmp        r8, 0x08
              00007 FF9882343C7 7237              jb         0x00007FF988234400

              00007 FF9882343C9 4983 F810          cmp        r8, 0x10
              00007 FF9882343CD 7711              jnbe       0x00007FF9882343E0

              00007 FF9882343CF 4 C8B1A            mov        r11, [rdx]
              00007 FF9882343D2 4 A8B5402F8        mov        rdx, [rdx+r8*1-0x08]
              00007 FF9882343D7 4 C8919            mov        [rcx], r11
              00007 FF9882343DA 4 A895401F8        mov        [rcx+r8*1-0x08], rdx
              00007 FF9882343DF C3                ret       

              00007 FF9882343E0 4983 F820          cmp        r8, 0x20
              00007 FF9882343E4 775 A              jnbe       0x00007FF988234440

              00007 FF9882343E6 0 F1002            movups     xmm0, [rdx]
              00007 FF9882343E9 420 F104C02F0      movups     xmm1, [rdx+r8*1-0x10]
              00007 FF9882343EF 0 F1101            movups     [rcx], xmm0
              00007 FF9882343F2 420 F114C01F0      movups     [rcx+r8*1-0x10], xmm1
              00007 FF9882343F8 C3                ret       

              00007 FF9882343F9 0 F1F8000000000    nop        [rax], eax
              00007 FF988234400 4 D85C0            test       r8, r8
              00007 FF988234403 7415              jz         0x00007FF98823441A

              00007 FF988234405 482 BD1            sub        rdx, rcx
              00007 FF988234408 7216              jb         0x00007FF988234420

              00007 FF98823440A 448 A1C11          mov        r11b, [rcx+rdx*1]
              00007 FF98823440E 48 FFC1            inc        rcx
              00007 FF988234411 49 FFC8            dec        r8
              00007 FF988234414 448859 FF          mov        [rcx-0x01], r11b
              00007 FF988234418 75 F0              jnz        0x00007FF98823440A

              00007 FF98823441A C3                ret       

              00007 FF98823441B 0 F1F440000        nop        [rax+rax*1], eax
              00007 FF988234420 4903 C8            add        rcx, r8
              00007 FF988234423 448 A5C11FF        mov        r11b, [rcx+rdx*1-0x01]
              00007 FF988234428 48 FFC9            dec        rcx
              00007 FF98823442B 49 FFC8            dec        r8
              00007 FF98823442E 448819            mov        [rcx], r11b
              00007 FF988234431 75 F0              jnz        0x00007FF988234423

              00007 FF988234433 C3                ret       

              00007 FF988234434 666666660 F1F8400  nop        [rax+rax*1], ax
                               00000000
              00007 FF988234440 4 E8D1C02          lea        r11, [rdx+r8*1]
              00007 FF988234444 482 BD1            sub        rdx, rcx
              00007 FF988234447 7309              jnb        0x00007FF988234452

              00007 FF988234449 4 C3BD9            cmp        r11, rcx
              00007 FF98823444C 0 F876E010000      jnbe       0x00007FF9882345C0

              00007 FF988234452 0 F100411          movups     xmm0, [rcx+rdx*1]
              00007 FF988234456 4883 C110          add        rcx, 0x10
              00007 FF98823445A F6C10F            test       cl, 0x0F
              00007 FF98823445D 7412              jz         0x00007FF988234471

              00007 FF98823445F 4883 E1F0          and        rcx, 0xFFFFFFFFFFFFFFF0
              00007 FF988234463 0 F100C11          movups     xmm1, [rcx+rdx*1]
              00007 FF988234467 0 F1100            movups     [rax], xmm0
              00007 FF98823446A 0 F28C1            movaps     xmm0, xmm1
              00007 FF98823446D 4883 C110          add        rcx, 0x10
              00007 FF988234471 4 C03C0            add        r8, rax
              00007 FF988234474 4 C2BC1            sub        r8, rcx
              00007 FF988234477 4 D8BC8            mov        r9, r8
              00007 FF98823447A 49 C1E906          shr        r9, 0x06
              00007 FF98823447E 746 F              jz         0x00007FF9882344EF

              00007 FF988234480 4981 F900100000    cmp        r9, 0x1000
              00007 FF988234487 0 F87B3000000      jnbe       0x00007FF988234540

              00007 FF98823448D 4983 E03F          and        r8, 0x3F
              00007 FF988234491 EB2D              jmp        0x00007FF9882344C0

              00007 FF988234493 666666666666660 F  nop        [rax+rax*1], ax
                               1 F840000000000
              00007 FF9882344A2 666666666666660 F  nop        [rax+rax*1], ax
                               1 F840000000000
              00007 FF9882344B1 666666666666660 F  nop        [rax+rax*1], ax
                               1 F840000000000
              00007 FF9882344C0 0 F100C11          movups     xmm1, [rcx+rdx*1]
              00007 FF9882344C4 0 F10541110        movups     xmm2, [rcx+rdx*1+0x10]
              00007 FF9882344C9 0 F105C1120        movups     xmm3, [rcx+rdx*1+0x20]
              00007 FF9882344CE 0 F10641130        movups     xmm4, [rcx+rdx*1+0x30]
              00007 FF9882344D3 0 F2941F0          movaps     [rcx-0x10], xmm0
              00007 FF9882344D7 4883 C140          add        rcx, 0x40
              00007 FF9882344DB 49 FFC9            dec        r9
              00007 FF9882344DE 0 F2949C0          movaps     [rcx-0x40], xmm1
              00007 FF9882344E2 0 F2951D0          movaps     [rcx-0x30], xmm2
              00007 FF9882344E6 0 F2959E0          movaps     [rcx-0x20], xmm3
              00007 FF9882344EA 0 F28C4            movaps     xmm0, xmm4
              00007 FF9882344ED 75 D1              jnz        0x00007FF9882344C0

              00007 FF9882344EF 4 D8BC8            mov        r9, r8
              00007 FF9882344F2 49 C1E904          shr        r9, 0x04
              00007 FF9882344F6 7419              jz         0x00007FF988234511

              00007 FF9882344F8 0 F1F840000000000  nop        [rax+rax*1], eax
              00007 FF988234500 0 F2941F0          movaps     [rcx-0x10], xmm0
              00007 FF988234504 0 F100411          movups     xmm0, [rcx+rdx*1]
              00007 FF988234508 4883 C110          add        rcx, 0x10
              00007 FF98823450C 49 FFC9            dec        r9
              00007 FF98823450F 75 EF              jnz        0x00007FF988234500

              00007 FF988234511 4983 E00F          and        r8, 0x0F
              00007 FF988234515 740 E              jz         0x00007FF988234525

              00007 FF988234517 4 E8D5C01F0        lea        r11, [rcx+r8*1-0x10]
              00007 FF98823451C 410 F100C13        movups     xmm1, [r11+rdx*1]
              00007 FF988234521 410 F110B          movups     [r11], xmm1
              00007 FF988234525 0 F2941F0          movaps     [rcx-0x10], xmm0
              00007 FF988234529 C3                ret       

              00007 FF98823452A 666666666666660 F  nop        [rax+rax*1], ax
                               1 F840000000000
              00007 FF988234539 0 F1F8000000000    nop        [rax], eax
              00007 FF988234540 4 D8BC8            mov        r9, r8
              00007 FF988234543 49 C1E906          shr        r9, 0x06
              00007 FF988234547 4983 E03F          and        r8, 0x3F
              00007 FF98823454B 0 F18441140        prefetchnta [rcx+rdx*1+0x40]
              00007 FF988234550 EB2E              jmp        0x00007FF988234580

              00007 FF988234552 666666666666660 F  nop        [rax+rax*1], ax
                               1 F840000000000
              00007 FF988234561 666666666666660 F  nop        [rax+rax*1], ax
                               1 F840000000000
              00007 FF988234570 666666666666660 F  nop        [rax+rax*1], ax
                               1 F840000000000
              00007 FF98823457F 90                nop       
              00007 FF988234580 0 F100C11          movups     xmm1, [rcx+rdx*1]
              00007 FF988234584 0 F10541110        movups     xmm2, [rcx+rdx*1+0x10]
              00007 FF988234589 0 F105C1120        movups     xmm3, [rcx+rdx*1+0x20]
              00007 FF98823458E 0 F10641130        movups     xmm4, [rcx+rdx*1+0x30]
   crash -->  00007 FF988234593 0 F2B41F0          movntps    [rcx-0x10], xmm0
              00007 FF988234597 4883 C140          add        rcx, 0x40
              00007 FF98823459B 0 F18441140        prefetchnta [rcx+rdx*1+0x40]
              00007 FF9882345A0 49 FFC9            dec        r9
              00007 FF9882345A3 0 F2B49C0          movntps    [rcx-0x40], xmm1
              00007 FF9882345A7 0 F2B51D0          movntps    [rcx-0x30], xmm2
              00007 FF9882345AB 0 F2B59E0          movntps    [rcx-0x20], xmm3
              00007 FF9882345AF 0 F28C4            movaps     xmm0, xmm4
              00007 FF9882345B2 75 CC              jnz        0x00007FF988234580

              00007 FF9882345B4 0 FAEF8            sfence    
              00007 FF9882345B7 E933FFFFFF        jmp        0x00007FF9882344EF

              00007 FF9882345BC 0 F1F4000          nop        [rax], eax
              00007 FF9882345C0 4903 C8            add        rcx, r8
              00007 FF9882345C3 0 F104411F0        movups     xmm0, [rcx+rdx*1-0x10]
              00007 FF9882345C8 4883E910          sub        rcx, 0x10
              00007 FF9882345CC 4983E810          sub        r8, 0x10
              00007 FF9882345D0 F6C10F            test       cl, 0x0F

00: 0x00007FF988234593
01: 0x0000021D169A7C8D
02: 0x4FCA53C5B68EDABA
03: 0xFABD8EF98F632349
Особенности языка mql5, тонкости и приёмы работы - Попробуйте использовать макрос второго уровня.
Особенности языка mql5, тонкости и приёмы работы - Попробуйте использовать макрос второго уровня.
  • 2025.11.04
  • www.mql5.com
поэтому он должен оценить x и ввести значение в ST2 для структуризации. с технической точки зрения При использовании одноуровневой индирекции ST2 x строчит имя введенного макроса но при использовании двойного слоя он строчит значение введенного макроса
 
예제 https://www.mql5.com/ko/code/818 의 작업을 확인하려고 합니다.
MT5 버전: 5.00 빌드 5370 2025년 10월 17일을 사용하고 있습니다.

어떤 이유로 memmap.mq5 파일을 컴파일하려고 할 때 오류가 발생합니다:

memmap.mq5                      
MemMapLib.mqh                   
wrong parameters count, 4 passed, but 3 requires        MemMapLib.mqh   279     9
   long CMemMapFile::Open(string,int,int)       MemMapLib.mqh   251     19
call resolves to 'long CMemMapFile::Open(string,int,int)' instead of 'long CMemMapApi::Open(string,int,int,int&)' due to new rules of method hiding     MemMapLib.mqh   279     9
   see declaration of function 'CMemMapFile::Open'      MemMapLib.mqh   251     19
   see declaration of function 'CMemMapApi::Open'       MemMapLib.mqh   122     19
wrong parameters count, 3 passed, but 1 requires        MemMapLib.mqh   292     9
   int CMemMapFile::Fill(uchar) MemMapLib.mqh   253     14
call resolves to 'int CMemMapFile::Fill(uchar)' instead of 'int CMemMapApi::Fill(long,uchar,int&)' due to new rules of method hiding    MemMapLib.mqh   292     9
   see declaration of function 'CMemMapFile::Fill'      MemMapLib.mqh   253     14
   see declaration of function 'CMemMapApi::Fill'       MemMapLib.mqh   124     14
wrong parameters count, 4 passed, but 1 requires        MemMapLib.mqh   299     16
   int CMemMapFile::Grows(int)  MemMapLib.mqh   255     14
call resolves to 'int CMemMapFile::Grows(int)' instead of 'long CMemMapApi::Grows(long,string,int,int&)' due to new rules of method hiding      MemMapLib.mqh   299     16
   see declaration of function 'CMemMapFile::Grows'     MemMapLib.mqh   255     14
   see declaration of function 'CMemMapApi::Grows'      MemMapLib.mqh   125     19
3 errors, 3 warnings            3       3

제가 뭘 잘못하고 있는지 알려주실 수 있나요? 그리고 어떻게 고칠 수 있나요?

File Mapping без DLL
File Mapping без DLL
  • 2012.01.16
  • www.mql5.com
Класс MQL5, который работает напрямую с маппингом, без использования самописной DLL.
 
Иван #:
제가 무엇을 잘못하고 있는지 알려주실 수 있나요? 그리고 어떻게 고칠 수 있나요?
라이브러리 소스가 MQL5 언어의 현재 요구 사항을 충족하지 않습니다.
 
fxsaber #:
라이브러리 소스가 MQL5 언어의 현재 요구 사항을 충족하지 않습니다.

이를 수정할 수 있는 방법이 있나요? 아니면 모든 소스를 다시 작업해야하며 작성자 없이는 불가능합니까? 컴파일러가 여기서 3개의 오류만 생성한 것 같습니다. 수정할 수 있다면 좋을 것 같습니다.

 
Иван #:

수정할 수 있는 방법이 있나요? 아니면 모든 소스를 재 작업해야하며 작성자 없이는 불가능합니까? 컴파일러가 여기서 3 개의 오류 만 발생했다고 생각합니다. 수정할 수 있다면 좋을 것 같습니다.

그리고 여기에서 이미 코드를 직접 수정했습니다. 필요한 사람들은 그것을 사용할 수 있습니다. 전문가 어드바이저가 성공적으로 컴파일됩니다.

251 줄부터 추가했습니다:

   using CMemMapApi::Open;
   using CMemMapApi::Close;
   using CMemMapApi::Fill;
   using CMemMapApi::Grows;
   using CMemMapApi::Write;
   using CMemMapApi::Read;
파일:
MemMapLib.mqh  31 kb