OOP에 대한 간접비

 

리소스 집약적 인 작업과 관련하여 기존 절차 프로그래밍과 비교하여 OOP를 사용하면 어떤 종류의 오버 헤드가 발생하는지에 대한 질문이 발생했습니다.

비슷한 테스트를 한 사람이 있습니까?

차이점에 관심:

  1. 매개변수를 사용하여 함수 호출
  2. 매개변수 없이 함수 호출
  3. 위 함수의 기능으로 매크로 호출
  4. 함수 호출 - 클래스 메서드
  5. 가상 함수 호출

 

어떤 오버헤드를 말씀하시는 건가요?

우리가 기계 코드에 대해 이야기하고 있다면 - 내가 아는 한 가상 함수 에서 - 가상 함수 테이블을 통한 간접 프로시저 호출입니다. 그리고 일반 기능의 경우 - 직접 호출. 제 생각에는 오버 헤드가 거의 없습니다.

훨씬 더 중요한 것은 오버헤드 프로그래밍입니다 - 코드 작성 및 유지 관리, 버그 수정...

 

매개변수가 없는 함수는 매개변수가 있는 함수보다 빠릅니다.

 
Dmitry Fedoseev :

매개변수가 없는 함수는 매개변수가 있는 함수보다 빠릅니다.


물론, 나는 2년 동안 어셈블러를 해왔다)) 임베디드 프로세서의 경우 사실이지만 C ++는 아프리카 C ++에도 있습니다. 매개변수가 없는 함수라도 프롤로그와 에필로그가 있기 때문에 시간이 걸립니다.

물론 가장 빠른 것은 함수용으로 설계된 매크로입니다. MQL에 인라인 함수 가 없는 것은 유감이지만 매크로가 일부 대체될 것입니다.

 
George Merts :

어떤 오버헤드를 말씀하시는 건가요?

우리가 기계 코드에 대해 이야기하고 있다면 - 내가 아는 한 가상 함수 에서 - 가상 함수 테이블을 통한 간접 프로시저 호출입니다. 그리고 일반 기능의 경우 - 직접 호출. 제 생각에는 오버 헤드가 거의 없습니다.

훨씬 더 중요한 것은 오버헤드 프로그래밍입니다 - 코드 작성 및 유지 관리, 버그 수정...


물론 런타임 오버헤드가 추가 킬로바이트로 인해 우리를 괴롭히지 않습니다. 테스트 해보세요..

 

물론 매크로가 가장 빠릅니다.

 
Alexey Volchanskiy :

물론 가장 빠른 것은 함수용으로 설계된 매크로입니다. MQL에 인라인 함수 가 없는 것은 유감이지만 매크로가 일부 대체될 것입니다.

Rinat는 진지한 인라인이 MT에서 작동하며 좋은 결과를 제공한다고 말했습니다.

 
George Merts :

Rinat는 진지한 인라인이 MT에서 작동하며 좋은 결과를 제공한다고 말했습니다.


예, MT4의 개인적인 관찰에 따르면 인라이너의 작업은 스택의 크기(스택의 변수에 할당된 메모리)와 변수의 수에 따라 다릅니다.
그리고 MT5에서는 스택 크기에 대한 종속성이 제거되고 일반적으로 옵티마이저가 더 강력해 보였습니다.

 
Alexey Volchanskiy :

리소스 집약적 인 작업과 관련하여 기존 절차 프로그래밍과 비교하여 OOP를 사용하면 어떤 종류의 오버 헤드가 발생하는지에 대한 질문이 발생했습니다.

비슷한 테스트를 한 사람이 있습니까?

차이점에 관심:

  1. 매개변수를 사용하여 함수 호출
  2. 매개변수 없이 함수 호출
  3. 위 함수의 기능으로 매크로 호출
  4. 함수 호출 - 클래스 메서드
  5. 가상 함수 호출

바로 사용 가능한 OO 라이브러리를 통해 OOP는 애플리케이션 개발 시간을 단축합니다. 실행 속도 면에서는 가상 함수를 호출할 때 약간의 감소가 가능합니다.

유일한 주의 사항은 좋은 OO 라이브러리의 가용성입니다.

"Standard Library"는 미의식을 깨고 DLL로 들어가 차분하게 C++로 코딩하게 합니다.

 
George Merts :

Rinat는 진지한 인라인이 MT에서 작동하며 좋은 결과를 제공한다고 말했습니다.

예, 인라이너는 매우 공격적이고 자동입니다.

x64 코드 최적화 프로그램도 32비트 버전보다 높습니다(이 분기는 완전히 중지되었으며 개발되지 않음). 또한 x64 옵티마이저는 대부분의 가상 기능 을 직접 및 인라인 호출로 확장할 수 있습니다. 결국 가상 기능은 종종 퇴화됩니다.

그러나 실제 오버헤드는 동적 인덱스의 링크 및 제어 작업에 있습니다. 지속적으로 모니터링해야 합니다.

 
Alexey Volchanskiy :

리소스 집약적 인 작업과 관련하여 기존 절차 프로그래밍과 비교하여 OOP를 사용하면 어떤 종류의 오버 헤드가 발생하는지에 대한 질문이 발생했습니다.

물론 리소스와 많은 디버깅 시간으로 OOP의 아름다움에 대한 비용을 지불해야 합니다. OOP는 편리한 텍스트 래퍼로 또는 런타임 환경을 초기화할 때 최소한의 사용으로만 의미가 있습니다. 본질적으로 OOP 는 순전히 Microsoft에서 프로그래머의 작업 시간 비용을 늘리고 고급 장비의 구매를 촉진하기 위한 마케팅이었습니다. 게다가 그들 자신은 바보가 아니며 모든 소프트웨어를 C와 어셈블러로 작성합니다.