저것들. 테스트에서 STRUCT2는 본질적으로 객체에 대한 메모리를 여러 번 할당하는 생성자가 있는 "문자열 클래스"를 포함하는 생성자가 있는 클래스로 작동합니다.
그런 복잡한 테스트는 여러 테스트로 나누어야 한다고 생각합니다. STRUCT1 및 STRUCT2 구조의 생성 시간을 테스트한 다음 데이터 액세스 시간을 테스트하려면 개발자 중 한 명이 문자열에 액세스한 후에만 문자열의 메모리가 할당된다고 썼습니다. - 귀하의 예에서 문자열은 일반적으로 상수 문자열로 초기화되며, 초기화가 어떻게 발생하는지 추측하기 어렵습니다. - 컴파일러는 문자열 배열에 액세스하기 전에 문자열 배열을 전혀 초기화할 수 없었습니다(또는 메모리를 할당하지 않았습니까? ).
의외의 결과를 얻었습니다.
IMHO, 테스트는 비교할 수 없습니다
STRUCT2에는 생성자가 있습니다.
STRUCT2에 문자열이 있습니다.
https://www.mql5.com/ru/forum/1111/page2732#comment_16181920 논의된 MQL에서 구현된 문자열에 대한 문서가 없습니다.
저것들. 테스트에서 STRUCT2는 본질적으로 객체에 대한 메모리를 여러 번 할당하는 생성자가 있는 "문자열 클래스"를 포함하는 생성자가 있는 클래스로 작동합니다.
그런 복잡한 테스트는 여러 테스트로 나누어야 한다고 생각합니다. STRUCT1 및 STRUCT2 구조의 생성 시간을 테스트한 다음 데이터 액세스 시간을 테스트하려면 개발자 중 한 명이 문자열에 액세스한 후에만 문자열의 메모리가 할당된다고 썼습니다. - 귀하의 예에서 문자열은 일반적으로 상수 문자열로 초기화되며, 초기화가 어떻게 발생하는지 추측하기 어렵습니다. - 컴파일러는 문자열 배열에 액세스하기 전에 문자열 배열을 전혀 초기화할 수 없었습니다(또는 메모리를 할당하지 않았습니까? ).
그런 복잡한 테스트는 여러 테스트로 나누어야 한다고 생각합니다
장난치고 싶지도 않습니다. 간단한 구조를 만들었습니다.
단순 구조의 첫 번째 필드에 대한 액세스가 크기에 따라 달라지는 이유 - 명확하지 않습니다.
장난치고 싶지도 않습니다. 간단한 구조를 만들었습니다.
단순 구조의 첫 번째 필드에 대한 액세스가 크기에 따라 달라지는 이유 - 명확하지 않습니다.
이 질문은 적절한 스레드에서 개발자에게 묻는 것이 좋습니다. 테스트 코드와 함께. 그들은 설명하거나 수정하거나 아무 말도하지 않을 것입니다 ... 여기, 확실히 세 번째 옵션 만 있습니다.
이 질문은 적절한 스레드에서 개발자에게 묻는 것이 좋습니다. 테스트 코드로. 그들은 설명하거나 수정하거나 아무 말도하지 않을 것입니다 ... 여기, 확실히 세 번째 옵션 만 있습니다.
내 MT5는 너무 많은 욕설이 발생했습니다. 치명적인 버그가 있습니다. 헛소리야.
장난치고 싶지도 않습니다. 간단한 구조를 만들었습니다.
이제 동일한 테스트 STRUCT1 및 STRUCT3
단순 구조의 첫 번째 필드에 대한 액세스가 크기에 따라 달라지는 이유 - 명확하지 않습니다.
여기에서는 커피 찌꺼기에 대해서만 추측합니다.
옵션 으로 C ++에서 동일한 테스트를 수행하고 결과를 보여줄 사람을 기다리십시오. 불일치가 크면 MQL의 메모리 할당 이 제대로 구현되지 않습니다.
테스트 1과 2가 거의 같다면 이것이 Windows가 메모리를 할당하는 방법입니다.
내 MT5는 너무 많은 욕설이 발생했습니다. 치명적인 버그가 있습니다. 헛소리야.
모든 버그를 보고하십시오. 중요하고 아니요. 물론 무감정 :)
테스트 1과 2가 거의 같다면 이것이 Windows가 메모리를 할당하는 방법입니다.
마지막 테스트를 2번 실행했습니다.
단말기 MetaQuotes Software Corp를 위해 MetaTrader 5 x64 빌드 2470이 시작되었습니다.
2020.05.30 17:01:27.996 tst_f (EURUSD,H1) 경고: 시간[tst_f.mq5 53: ArrayResize (Array1,Amount)] = 1ms.
2020.05.30 17:01:27.996 tst_f (EURUSD,H1) 50000000
2020.05.30 17:01:28.002 tst_f (EURUSD,H1) 경고: 시간[tst_f.mq5 54: ArrayResize(Array3,Amount)] = 6ms.
2020.05.30 17:01:28.002 tst_f (EURUSD,H1) 50000000
2020.05.30 17:01:28.515 tst_f (EURUSD,H1) 경고: 시간[tst_f.mq5 56: Func(Array1)] = 512ms.
2020.05.30 17:01:28.515 tst_f (EURUSD,H1) 1333106752
2020.05.30 17:01:30.734 tst_f (EURUSD,H1) 경고: 시간[tst_f.mq5 57: Func(Array3)] = 2218ms.
2020.05.30 17:01:30.734 tst_f (EURUSD,H1) 1333106752
2020.05.30 17:01:41.278 tst_f (EURUSD,H1) 경고: 시간[tst_f.mq5 53: ArrayResize(Array1,Amount)] = 2ms.
2020.05.30 17:01:41.278 tst_f (EURUSD,H1) 50000000
2020.05.30 17:01:41.287 tst_f (EURUSD,H1) 경고: 시간[tst_f.mq5 54: ArrayResize(Array3,Amount)] = 9ms.
2020.05.30 17:01:41.287 tst_f (EURUSD,H1) 50000000
2020.05.30 17:01:41.840 tst_f (EURUSD,H1) 경고: 시간[tst_f.mq5 56: Func(Array1)] = 552ms.
2020.05.30 17:01:41.840 tst_f (EURUSD,H1) 1333106752
2020.05.30 17:01:43.728 tst_f (EURUSD,H1) 경고: 시간[tst_f.mq5 57: Func(Array3)] = 1888ms.
2020.05.30 17:01:43.728 tst_f (EURUSD,H1) 1333106752
모든 파일이 스크립트에 첨부된 것은 아니며 마지막 줄이 컴파일되지 않았습니다.
Debug.mqh가 포함되어 있습니다.
UPD: 이전 빌드에서 테스트를 실행했습니다.
2020.05.30 17:17:27.604 단말기 메타 트레이더 5 - 빌드 2361
2020.05.30 17:13:17.046 tst (EURUSD,H1) 경고: 시간[tst.mq5 53: ArrayResize(Array1,Amount)] = 1ms.
2020.05.30 17:13:17.047 tst (EURUSD,H1) 50000000
2020.05.30 17:13:17.053 tst (EURUSD,H1) 경고: 시간[tst.mq5 54: ArrayResize(Array3,Amount)] = 6ms.
2020.05.30 17:13:17.053 tst (EURUSD,H1) 50000000
2020.05.30 17:13:17.563 tst (EURUSD,H1) 경고: 시간[tst.mq5 56: Func(Array1)] = 510ms.
2020.05.30 17:13:17.563 tst (EURUSD,H1) 1333106752
2020.05.30 17:13:19.416 tst (EURUSD,H1) 경고: 시간[tst.mq5 57: Func(Array3)] = 1852ms.
2020.05.30 17:13:19.416 tst (EURUSD,H1) 1333106752
2020.05.30 17:13:28.971 tst (EURUSD,H1) 경고: 시간[tst.mq5 53: ArrayResize(Array1,Amount)] = 2ms.
2020.05.30 17:13:28.971 tst (EURUSD,H1) 50000000
2020.05.30 17:13:28.977 tst (EURUSD,H1) 경고: 시간[tst.mq5 54: ArrayResize(Array3,Amount)] = 6ms.
2020.05.30 17:13:28.977 tst (EURUSD,H1) 50000000
2020.05.30 17:13:29.456 tst (EURUSD,H1) 경고: 시간[tst.mq5 56: Func(Array1)] = 478ms.
2020.05.30 17:13:29.456 tst (EURUSD,H1) 1333106752
2020.05.30 17:13:31.192 tst (EURUSD,H1) 경고: 시간[tst.mq5 57: Func(Array3)] = 1735ms.
2020.05.30 17:13:31.192 tst (EURUSD,H1) 1333106752
모든 버그를 보고하십시오. 중요하고 아니요. 물론 무감정 :)
자세한 스레드를 생성했습니다.
그리고 장소에서 그들의 광고를 바꾸려고 노력하십시오. 스택의 맨 위에 있는 항목에 따라 달라지지 않습니까?
2020.05.30 17:33:07.892 tst_f (EURUSD,H1) 경고: 시간[tst_f.mq5 54: ArrayResize (Array3,Amount)] = 6ms.
2020.05.30 17:33:07.955 tst_f (EURUSD,H1) 50000000
2020.05.30 17:33:07.957 tst_f (EURUSD,H1) 경고: 시간[tst_f.mq5 55: ArrayResize(Array1,Amount)] = 1ms.
2020.05.30 17:33:07.957 tst_f (EURUSD,H1) 50000000
2020.05.30 17:33:09.902 tst_f (EURUSD,H1) 경고: 시간[tst_f.mq5 58: Func(Array3)] = 1945ms.
2020.05.30 17:33:09.902 tst_f (EURUSD,H1) 1333106752
2020.05.30 17:33:10.353 tst_f (EURUSD,H1) 경고: 시간[tst_f.mq5 59: Func(Array1)] = 450ms.
2020.05.30 17:33:10.353 tst_f (EURUSD,H1) 1333106752