최적화 중 일회성 어레이 계산 - 페이지 6

 
Alexey Viktorov :

다음은 배열을 쓰고 읽는 예입니다.

디버그 모드에서 두 번 실행하고 배열을 쓰고 읽는 데 걸리는 시간을 확인하십시오. 첫 번째 실행은 배열을 파일에 쓰고 두 번째 실행은 배열을 읽고 배열에서 날짜 인쇄를 시작합니다. 그런 다음 선택한 부분을 처리하고 IS_DEBUG_MODE 를 제거하고 조건에 IsOptimization()을 삽입해야 하는지 여부

고맙습니다!
 
Dmitry Fedoseev :

FileWriteInteger()와 같은 함수가 있습니다. 위치로 식별합니다. 변수는 파일의 시작 부분에 있어야 합니다. 읽은 후 포인터는 끝으로 이동합니다. 배열의 시작 부분으로 배열을 읽은 후 포인터는 다음 변수 앞에 ...

파일 작업에 대한 기사가 곧 나올 예정입니다.

나는 단지 파일 작업에 대한 기사가 없다는 것을 당신에게 쓰고 싶었습니다. 당신은 그것들을 유익하고 이해하기 쉽게 만들었습니다. 나는 그들이 나타날 때 확실히 읽을 것입니다.

 

전역 수준에서 배열을 선언 하려고 했습니다(mql4 코드).

 datetime T[];

init에 채우십시오

 ArrayResize (T, 40 );
datetime T[ 40 ]=
   {
   1262731020 , 1262735700 , 1262821920 , 1262903400 , 1262989740 , 1263247200 , 1263339060 , 1263420000 , 1263507480 , 1263595500 ,
   1265324700 , 1265407200 , 1265752980 , 1265926500 , 1265930820 , 1267657200 , 1267740300 , 1267826460 , 1268175840 , 1268346360 ,
   1270504920 , 1270684140 , 1270768500 , 1272924180 , 1273011720 , 1273097100 , 1273272240 , 1273528800 , 1273617180 , 1275344100 ,
   1275516000 , 1275602400 , 1275689160 , 1276034400 , 1276124580 , 1276208700 , 1276211640 , 1278027960 , 1278369780 , 1278373920
   };

시작할 때 인쇄할 때 1971년의 날짜를 표시합니다. 즉, 배열이 비어 있습니다.

 for ( int x= 0 ;x<= 39 ;x++)
   {
   Print ( "T[x]=" ,T[x], "x=" ,x);   
   }

처음에 배열을 채우면 값이 나타납니다. 아마도 그 이유는 새 날짜 시간에 배열을 초기화하지만 코드가 없으면 코드가 컴파일되지 않기 때문일 수 있습니까?

일반적으로 배열이 사라집니다. 내가 무엇을 잘못하고 있지?

 
forexman77 :

전역 수준에서 배열을 선언 하려고 했습니다(mql4 코드).

init에 채우십시오

시작할 때 인쇄할 때 1971년의 날짜를 표시합니다. 즉, 배열이 비어 있습니다.

처음에 배열을 채우면 값이 나타납니다. 아마도 그 이유는 새 날짜 시간에 배열을 초기화하지만 코드가 없으면 코드가 컴파일되지 않기 때문일 수 있습니까?

일반적으로 배열이 사라집니다. 내가 무엇을 잘못하고 있지?

컴파일러가 강조한 경고를 보십시오.

 ArrayResize (T, 40 );
datetime T[ 40 ]=

그런 약간의 움직임으로 로컬 배열 T를 정의했는데 OnInit를 종료하면 바이바이..

 
Maxim Kuznetsov :

컴파일러를 강조 표시한 경고를 보십시오.

그런 약간의 움직임으로 로컬 배열 T를 정의했는데 OnInit를 종료하면 바이바이..

이미 글로벌 수준에 존재한다고 씁니다.)

'T' 선언은 40행에서 전역 선언을 숨깁니다.

그러나 그것을 올바르게하는 방법. 이전에는 중괄호가 array 를 선언 하지 않았습니다. 0으로 초기화하고 크기를 설정한 다음 순환으로 채웁니다. 여기서 또 해야 할 일이 있나요?

인터넷에서 datetime을 제거하면 컴파일되지 않고 두 가지 오류가 기록됩니다.

'{' - 표현식이 필요함

'=' - 잘못된 연산 사용



 
forexman77 :

이미 글로벌 수준에 존재한다고 씁니다.)

'T' 선언은 40행에서 전역 선언을 숨깁니다.

그러나 그것을 올바르게하는 방법. 이전에는 중괄호가 array 를 선언 하지 않았습니다. 0으로 초기화하고 크기를 설정한 다음 순환으로 채웁니다. 여기서 또 해야 할 일이 있나요?

인터넷에서 datetime을 제거하면 컴파일되지 않고 두 가지 오류가 기록됩니다.

'{' - 표현식이 필요함

'=' - 잘못된 연산 사용



상수 초기화와 함께 배열 선언은 전역 수준에서 수행될 수 있고 수행되어야 합니다.

 datetime T[ 40 ]=
   {
   1262731020 , 1262735700 , 1262821920 , 1262903400 , 1262989740 , 1263247200 , 1263339060 , 1263420000 , 1263507480 , 1263595500 ,
   1265324700 , 1265407200 , 1265752980 , 1265926500 , 1265930820 , 1267657200 , 1267740300 , 1267826460 , 1268175840 , 1268346360 ,
   1270504920 , 1270684140 , 1270768500 , 1272924180 , 1273011720 , 1273097100 , 1273272240 , 1273528800 , 1273617180 , 1275344100 ,
   1275516000 , 1275602400 , 1275689160 , 1276034400 , 1276124580 , 1276208700 , 1276211640 , 1278027960 , 1278369780 , 1278373920
   };
void OnInit() 
{
 ....
}
 
forexman77 :

이미 글로벌 수준에 존재한다고 씁니다.)

'T' 선언은 40행에서 전역 선언을 숨깁니다.

그러나 그것을 올바르게하는 방법. 이전에는 중괄호가 array 를 선언 하지 않았습니다. 0으로 초기화하고 크기를 설정한 다음 순환으로 채웁니다. 여기서 또 해야 할 일이 있나요?

인터넷에서 datetime을 제거하면 컴파일되지 않고 두 가지 오류가 기록됩니다.

'{' - 표현식이 필요함

'=' - 잘못된 연산 사용



through = 배열은 선언된 경우에만 초기화할 수 있습니다. 어떻게 든 C의 유물이지만 여기에서 허용됩니다 :-)
 
Maxim Kuznetsov :

상수 초기화와 함께 배열 선언은 전역 수준에서 수행될 수 있고 수행되어야 합니다.

예, 시도했고 작동합니다. 그리고 글로벌 수준이 아닌 어떤 방식으로든 인터넷에서 어레이를 한 번 채우고 어레이 의 값을 사용하기 위해 계산 비용을 줄이기 위해 했을까요?

전역 수준의 논리적 변수는 항상 변경되지 않지만 프로그램 시작 시 계산이 한 번 수행된다는 의미입니까?

 
forexman77 :

예, 시도했고 작동합니다. 그리고 글로벌 수준이 아닌 어떤 방식으로든 인터넷에서 어레이를 한 번 채우고 어레이 의 값을 사용하기 위해 계산 비용을 줄이기 위해 했을까요?

전역 수준의 논리적 변수는 항상 변경되지 않지만 프로그램 시작 시 계산이 한 번 수행된다는 의미입니까?

예, 터미널에서 실행하기 위해 ex4 ex5 바이너리를 준비할 때. 설명된(그리고 컴파일하는 동안 ex4/5 내부에 저장되는) 데이터 배열에 대한 링크만 던져진다고 생각할 수 있으며 이는 매우 빠릅니다.
 
forexman77 :

이미 글로벌 수준에 존재한다고 씁니다.)

'T' 선언은 40행에서 전역 선언을 숨깁니다.

그러나 그것을 올바르게하는 방법. 이전에는 중괄호가 array 를 선언 하지 않았습니다. 0으로 초기화하고 크기를 설정한 다음 순환으로 채웁니다. 여기서 또 해야 할 일이 있나요?

인터넷에서 datetime을 제거하면 컴파일되지 않고 두 가지 오류가 기록됩니다.

'{' - 표현식이 필요함

'=' - 잘못된 연산 사용



예, 배열이 어떻게 채워지는지는 중요하지 않습니다. 조건을 설정하기만 하면 됩니다. 배열 크기가 0이면 계산하고 채우고 파일에 기록해야 합니다. 그리고 OnInit()에서 내 예에 따라 선언된 배열을 읽어보십시오. 따라서 배열 파일이 있으면 읽고 배열이 채워지면 배열이 다시 계산되지 않고 채워집니다.