Библиотеки: File Mapping без DLL - страница 12

 
Спасибо, хорошая работа.
 

Нужно было передавать огромные объемы (гигабайты) данных. Реализация через данную библиотеку, к сожалению, показала сверх-низкую производительность.

Пришлось полностью переделать, используя исходный набор DLL. Получилось быстро.

 
Удивительно, как эта поделка вообще у кого-то заработала. С такими-то глюками внутри... Ниже фрагмент из CMemMapApi::Write() ArrayResize(src, size); memcpyX(src, view, size); // взяли байтбуфер for(int i=0; i
 

К сожалению, FileMapping имеет один существенный минус. Если дочернее приложение (считывающее данные) по какой-то причине корректно (вызов kernel32::UnmapViewOfFile и kernel32::CloseHandleне завершило свою работу, то "файл" остается висеть в памяти до тех пор, пока не будут закрыты все процессы, откуда было открытие (вызов kernel32::OpenFileMappingW и kernel32::MapViewOfFile). В частности, нельзя поменять его размер - переоткрыть (закрыть и заново открыть).


Не нашел решение проблемы. С данной библиотекой на такую ситуацию нарваться тяжело, т.к. каждое действие в ней начинается с открытия и заканчивается закрытием. Именно с этим связана ее медлительность. Но все равно можно нарваться на данную ошибку. И тогда будет аварийное завершение MQL-программы с таким сообщением.

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

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

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

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

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

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

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

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

              00007FF98823441A C3                ret       

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

              00007FF988234433 C3                ret       

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

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

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

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

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

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

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

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

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

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

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

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

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

              00007FF9882345B4 0FAEF8            sfence    
              00007FF9882345B7 E933FFFFFF        jmp        0x00007FF9882344EF

              00007FF9882345BC 0F1F4000          nop        [rax], eax
              00007FF9882345C0 4903C8            add        rcx, r8
              00007FF9882345C3 0F104411F0        movups     xmm0, [rcx+rdx*1-0x10]
              00007FF9882345C8 4883E910          sub        rcx, 0x10
              00007FF9882345CC 4983E810          sub        r8, 0x10
              00007FF9882345D0 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/ru/code/818
Использую MT5 Version: 5.00 build 5370 17 Oct 2025.

Почему-то при попытке скомпилировать файл 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