MQL5의 OOP에 대한 질문 - 페이지 65

 
Sergey Dzyublik :

구조체와 클래스(새 항목 없음)에 대해 잊었습니다. 둘 다 스택에 할당되어 있습니다.

C ++와 혼동하지 마십시오. 모든 것이 여기에 더 가깝습니다.

 
Maxim Kuznetsov :

C ++와 혼동하지 마십시오. 모든 것이 여기에 더 가깝습니다.

이것은 현실이 아니라 당신의 환상입니다.
자신이 테스트하지 않은 것을 증명하지 마십시오 ...
구조체 및 클래스의 개체 형태로 지역 변수 생성(새 항목 없음)은 스택에서 발생합니다.
MT5에서 +- 어레이가 작동 하는 방식 은 앞에서 설명했습니다 .

 
Dmitry Fedoseev :

정말 짜증나!

1 - 객체 생성을 통해. 2 - 일반 함수 호출을 통해서만. 첫 번째 숫자는 시간(밀리초)이고 두 번째 숫자는 무시됩니다.

이미 거의 10배(때로는 10배 이상) 더 빠릅니다. 얼마나 슬픔 ... 스택 ... 무리 ... *** 차

글쎄요, 왜 주의를 기울이지 않습니까? 추측해 보겠습니다. INT_MAX가 임시 객체 생성을 통해 한 번 작업을 수행한 다음 함수 호출을 통해 동일한 작업을 수행했습니까?

일반적으로 런타임에 클래스 생성 주위에 탬버린과 함께 춤을 추는 경우 예상되는 결과입니다(특정 컨테이너의 인덱스와 매우 흡사한 이 핸들이 필요함).

추신. 재생 소스는 어디에 있습니까?

추신 함수가 호출된 것이 확실합니까? 마찬가지로 이 코드에는 옵티마이저가 있습니다. 함수가 런타임에 호출된다는 사실은 아닙니다.

 for ( int i= 0 ;i< 500 ;++i){
   int x=Get(i);}

int Get( int x) { return -x;}

UB가 mql에 존재한다는 사실은 다음 코드로 증명됩니다.

 void OnStart (){
   Print (Test()? "Ok" : "No" );
}

bool Test ( void )
{
   const int MAX = 1000 ;
   int a= 1 ,b= 1 ,c= 1 ;
   while ( 1 ) {
     if (((a*a*a) == ((b*b*b)+(c*c*c)))) return true ;
    a++;
     int x=Get(a);
     if (a>MAX) {
      a= 1 ;
      b++;
    }
     if (b>MAX) {
      b= 1 ;
      c++;
    }      
     if (c>MAX) {
      c= 1 ;
    }
  }
   return false ;
}
 
Vladimir Simakov :

UB가 mql에 존재한다는 사실은 다음 코드로 증명됩니다.

영리하게 컴파일러를 손가락으로 동그라미를 쳤습니다.
- while(1) 루프에서 중단이 없기 때문에 false 분기가 버려집니다.
- "외부 세계"와의 상호 작용 없이 로컬 변수 에 대해 작업이 수행되고 이 코드의 실행도 버려지기 때문에 true가 반환됩니다.

 
Sergey Dzyublik :

영리하게 컴파일러를 손가락으로 동그라미를 쳤습니다.
- while(1) 루프에서 중단이 없기 때문에 false 분기가 버려집니다.
- "외부 세계"와의 상호 작용 없이 로컬 변수 에 대해 작업이 수행되고 이 코드의 실행도 버려지기 때문에 true가 반환됩니다.

이것은 내가 아닙니다. 이것은 인터넷의 예 중 하나입니다. 플러스와 일대일.

 
Vladimir Simakov :

글쎄요, 왜 주의를 기울이지 않습니까? 추측해 보겠습니다. INT_MAX가 임시 객체 생성을 통해 한 번 작업을 수행한 다음 함수 호출을 통해 동일한 작업을 수행했습니까?

일반적으로 런타임에 클래스 생성 주위에 탬버린과 함께 춤을 추는 경우 예상되는 결과입니다(특정 컨테이너의 인덱스와 매우 흡사한 이 핸들이 필요함).

추신. 재생 소스는 어디에 있습니까?

추신 함수가 호출된 것이 확실합니까? 마찬가지로 이 코드에는 옵티마이저가 있습니다. 함수가 런타임에 호출된다는 사실은 아닙니다.

UB가 mql에 존재한다는 사실은 다음 코드로 증명됩니다.

잘못 추측. 여기서 추측할 필요는 없지만 어제를 기억하는 것으로 충분합니다. 기억에 문제가 있는 경우 따옴표로 대화 내용을 볼 수 있습니다. 그 전에 반대를 주장했다면 왜 결과가 갑자기 예상이 되었습니까?

예, 함수가 호출되었다고 확신합니다. 내가 바보가 될 정도로 꿈을 꾸는 걸 너희들 모두 좋아하니? 왜 함수에 대한 질문만 합니까, 아니면 개체가 생성되지 않았을 수도 있습니다. 아니면 모든 컴파일러가 어떻게 작동하는지 알고 있다고 확신하십니까?

 
Sergey Dzyublik :

무슨 내용인지 설명해주실 수 있나요? 아니면 제가 좀 멍청해서 세 번 읽었지만 하나도 이해하지 못했습니다...

대화 내용에 대한 인용문을 보십시오. 내가 인용한 내용과 그에 대한 응답으로 인용문에서 이 답변을 받았습니다.

 
그리고 당신은 그런 말도 안되는 대화를 이끌어 냅니다 ... 스택에 대해, array-string에 대해 ... "스택에서"를 통한 설명은 작동하지 않습니다.
 

Dmitry는 자신의 코드를 게시하는 것이 창피했기 때문에 15분이 걸렸습니다. 테스트를 제공합니다.

죄송합니다. 동일한 조치로 차이는 30%에 불과했습니다.

 class CTest{
   static uint count;
   static double temp;
   int i;
public :
   CTest( int _x):i(_x){++count; temp+=( double ) GetMicrosecondCount (); temp/=count;}
   ulong Get() { return GetMicrosecondCount ()+i;}
   static uint Count()  { return count;}
   static double Temp() { return temp;}
};

int i= 1 ;
double temp;

uint CTest::count= 0 ;
double CTest::temp= 0.0 ;

void OnStart (){
   ulong t= GetMicrosecondCount ();
   for (;i< 1000001 ;++i){
      temp+=( double )CTest(i).Get();
      temp/=i;}
   ulong _t= GetMicrosecondCount ()-t;
   Print (_t, " | " ,i);
   Print (CTest::Count());
   Print (CTest::Temp());
   t= GetMicrosecondCount ();
   for (;i< 2000001 ;++i){
      temp+=( double )Test(i);
      temp/=i;}
   _t= GetMicrosecondCount ()-t;
   Print (_t, " | " ,i);
   Print (temp);
}

ulong Test( int x) {
   static uint count= 0 ;
   static double _temp= 0.0 ;
   ++count;
   _temp+=( double ) GetMicrosecondCount ();
   _temp/=count;
   return GetMicrosecondCount ()+x;}

정적 변수 와 필드가 있는 이러한 모든 제스처가 없어도 실행 시간의 차이는 지속됩니다. 백분율이 아니라 마이크로초 단위의 차이입니다.

결론: 스택에 임시 개체를 만드는 비용은 가장 빠른 컴퓨터가 아닌 내 컴퓨터에서 매우 작습니다. 약 30-40ns/piece(나노초)이므로 대부분의 경우에 주의를 기울여야 합니다. .

추신. 그리고 나는 개발자에 대해 나쁘게 생각했지만 아니요, 사람들의 말을 받아들이지 않고 확인하면됩니다))))

 
Vladimir Simakov :

Dmitry는 자신의 코드를 게시하는 것이 창피했기 때문에 15분이 걸렸습니다. 테스트를 제공합니다.

죄송합니다. 동일한 조치로 차이는 30%에 불과했습니다.

정적 변수 와 필드가 있는 이러한 모든 제스처가 없어도 실행 시간의 차이는 지속됩니다. 백분율이 아니라 마이크로초 단위의 차이입니다.

결론: 스택에 임시 개체를 만드는 비용은 가장 빠른 컴퓨터가 아닌 내 컴퓨터에서 매우 작습니다. 약 30-40ns/piece(나노초)이므로 대부분의 경우에 주의를 기울여야 합니다. .

추신. 그리고 나는 개발자에 대해 나쁘게 생각했지만 아니요, 사람들의 말을 받아들이지 않고 확인하면됩니다))))

더욱이 내부에서 온갖 종류의 계산을 수행하면 그 차이가 훨씬 줄어들 것입니다. 그리고 일반적으로 이 테스트는 동일한 기능의 테스트라고 하기 어렵습니다.

또한 테스트 자체가 동일하지 않습니다.