C++ 응용 프로그램에서 함수 (LLVM JIT)를 호출해야합니다. 이 호출은 실패하거나 심지어 abort() 또는 exit() 신호를 보일 수 있습니다. 호스트 응용 프로그램에 미치는 영향을 피하거나 최소한 줄이려면 어떻게해야합니까? 누군가는 fork()를 사용하도록 제안했지만, 나는 윈도우와 posix 모두를위한 해결책이 필요하다. fork()를 사용하더라도 ... 두 프로세스가 통신 할 수 있습니까 (일부 포인터 전달)?함수 호출을 방탄으로 만드는 방법은 무엇입니까?
답변
기본적으로 실패 할 수도있는 호출을 분리해야합니다. 그렇기 때문에 아마도 별도의 프로세스를 만들어야 할 것입니다. 나는 실제로이 특정 호출과 필요한 지원 기능을 포함하는 작은 실행 파일을 만들고 유인물에서 호출하도록 유혹 될 것입니다. 이것은 Windows에서 fork()
이 부족하다는 것을 알려주고 동일한 메커니즘을 사용하여 통신 할 수 있도록합니다.
동일한 주소 공간을 공유하지 않기 때문에 프로세스간에 포인터를 전달할 수 없습니다. 내가 할 일은 stdin에서 데이터를 읽고 stdout에 쓰기를하는 프로세스를 생성하는 것입니다.이 프로세스는 데이터를 자식의 stdin으로 파이핑하고 자식의 stdout에서 읽는 것입니다. 기본적으로 유닉스 (커맨드 라인) 필터가 작동하는 방식. 또 다른 대안은 많은 양의 데이터를 전달할 때 디스크의 파일 (더 나은 RAM 디스크)에서 쓰거나 읽거나 그런 방식으로 통신하는 것입니다. 그러나 많은 양의 데이터를 말하는 것이 아니라면 과도합니다 .
Eugen이 주석에서 지적한 것처럼, 포인터를 전달하려는 경우 또는 다른 프로세스 간 통신 메커니즘을 전달하려는 경우 공유 메모리를 사용할 수도 있습니다. 즉, 이들 중첩 된 실행 파일은 처음부터 디버그하기 쉽지 않으므로 가능한 가장 간단한 방법을 선택하십시오.
메시지 대기열은 스레드 간 통신을 수행하는 또 다른 방법입니다. –
공유 메모리를 사용하여 실제로 포인터를 전달할 수 있습니다. Boost.Interprocess에서 공유 메모리를 사용하여 수행 할 수있는 작업을 확인하십시오. –
@Justin Ardini - '크래시'응용 프로그램이 별도의 프로세스에서 살아야하므로 스레드를 사용하면 여기에 적용되지 않습니다. –
- 1. 자바 스크립트 함수 호출을 지연시키는 방법은 무엇입니까?
- 2. greasemonkey에서 동기식 AJAX 호출을 만드는 방법은 무엇입니까?
- 3. 함수 변수를 전달할 때 PHP 함수 호출을 피하는 방법은 무엇입니까?
- 4. 5 초 동안 함수 호출을 지연시키는 방법은 무엇입니까?
- 5. 'ESP의 값이 함수 호출을 통해 저장되지 않았습니다'오류를 디버깅하는 방법은 무엇입니까?
- 6. 유형 라이브러리에서 함수 호출 호출을 얻는 방법은 무엇입니까?
- 7. ContextBoundObject를 사용하여 호출 전후에 함수 호출을 인터셉트하는 방법은 무엇입니까?
- 8. WinDbg에서 실행되는 동안 각 함수 호출을 인쇄하는 방법은 무엇입니까?
- 9. Moq를 사용하여 구체적인 객체에서 함수 호출을 모의하는 방법은 무엇입니까?
- 10. 동일한 웹 서비스에서 여러 함수 호출을 처리하는 방법은 무엇입니까?
- 11. 텍스트 영역에서 JavaScript 함수 및 해당 호출을 주입하는 방법은 무엇입니까?
- 12. Pythonic 방식으로 함수 호출을 가로채는가?
- 13. 범용 jquery 유효성 검사 및 재설정 함수 호출을 만드는 방법
- 14. Ruby/Rails에서 한 번만 발생하는 함수 호출을 만드는 방법
- 15. jQuery 슬라이드 변경에서 ajax 호출을 만드는 방법은 무엇입니까?
- 16. Ajax에서 호출 한 Div 내부에서 Ajax 호출을 만드는 방법은 무엇입니까?
- 17. 비동기 웹 서비스 호출을 C#으로 만드는 방법은 무엇입니까?
- 18. XmlSerializer.Serialize에 대한 호출을 통해 XmlNode를 만드는 방법은 무엇입니까?
- 19. AJAX를 사용하여 XML-RPC 호출을 만드는 방법은 무엇입니까?
- 20. 함수 호출에서 함수 호출을 사용할 수 없습니다.
- 21. dll 함수 호출을 청취하는 방법
- 22. 콘솔에 모든 함수 호출을 기록하십시오.
- 23. 함수 호출을 막기위한 watch dog
- 24. 는 함수 호출을 지연하는 방법
- 25. "모호한"함수 호출을 수정하려면 어떻게합니까?
- 26. 시스템 호출을 분해하는 방법은 무엇입니까?
- 27. AJAX 호출을 인증하는 방법은 무엇입니까?
- 28. 메서드 호출을 후위 표기법으로 변환하는 방법은 무엇입니까?
- 29. 콜백 함수 내에서 비동기 호출을 새로 작성하십시오.
- 30. 인스턴스 메소드 호출을 인터셉트하는 방법은 무엇입니까?
IIRC, LLVM JIT는 기능을 재정의 할 수 있습니다. IOW 애플리케이션은 함수를 선언하여 JIT 환경에 배치 할 수 있습니다. LLVM 메일 목록을 확인할 가치가 있습니다. – Dummy00001