2012-03-27 4 views
7

저는 Mex 파일을 작성하려고합니다. 그래서 MATLAB에서 C++ 코드를 사용할 수 있습니다.C++/MATLAB Mex 바인딩

이 코드는 싱글 톤 클래스 (C++)를 기반으로 작성되었습니다.

나는 메모리가 지속적이어야한다는 것을 읽었습니다. malloc/new의 MxAlloc isntead를 사용해야합니다. 사용하는 모든 메모리에 대해 사실입니까? 즉, 내가 가진 클래스는 벡터를 사용하고 벡터는 표준 메커니즘을 사용하여 자동으로 새 메모리를 할당합니다.

MxAlloc을 사용하여 할당 된 클래스의 벡터가 메모리를 유지하는 데 문제가 있습니까?

+0

위대한 질문 -이 문제는 설명서에 잘 설명되어 있지 않습니다. MEX와 호환되도록 각 메모리 호출을 변경해야한다고 생각하면서 불필요하게 전체 라이브러리를 다시 작성하는 사람들에 대해 들었습니다. –

+0

고마워요! 재 작성은 라이브러리가 아직 개발 중이기 때문에 피하고 싶었던 부분이었습니다. 라이브러리의 인스턴스가 두 개 (하나는 c/C++ 작업용, 하나는 MATLAB 프로토 타입 용)가되었습니다. –

+0

마음에 비록 내가 확실히 모르고있는 미묘한 점이 더있다. 예를 들어, Mex 파일이 인터럽트되면 (예를 들어 오류를 통해), 표준 C 메소드 *를 통해 할당 된 메모리는 적절히 할당 해제되지 않을 수 있습니다 ...이 지점에 대한 추가 정보는 알고있는 사람들로부터 인정 될 것입니다! –

답변

7

Matlab으로 돌아갈 데이터에 대해서만 MxAlloc을 사용하십시오. 라이브러리에있는 모든 것을 정상적으로 할당 할 수 있습니다.

당신이 알고 있어야하는 한 가지 문제점은 언제든지 라이브러리를 언로드 할 수 있다는 것입니다. 일반적으로 사용자가 mexFunction을 호출하면 라이브러리가로드되고 후속 호출을 위해로드 된 상태로 유지됩니다. 그러나 언제든지 Matlab이 라이브러리를 언로드 할 수 있으므로 mexFunction의 모든 리소스가 해제됩니다.

+3

필요한 경우 mexLock http://www.mathworks.co.uk/help/techdoc/apiref/mexlock.html을 사용하여 mex 파일이 언로드되지 않도록 할 수 있습니다. – Edric