어레이와 관련된 DLL Interop 및 메모리 관리

파라 프

내 질문은 .Net에서 dll을 상호 운용 할 때 메모리 사용에 관한 것입니다 (C #을 사용하고 있지만 대답은 다른 .Net 언어에 적용되어야합니다).

배열을 취하는 dll에 C 함수가 있다고 가정합니다.

extern __declspec(dllexport) void Func(int * arr, int len);

C #에서 두 가지 해당 호출을 선택할 수 있습니다.

[DllImport("Lib.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern void Func([In] IntPtr arr, [In] int len);

또는:

[DllImport("Lib.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern void Func([In] int[] arr, [In] int len);

C 함수가 배열 할당을 해제하지 않으면 C 함수가 마샬링 된 배열을 해제 할 것이라고 가정하여 후자의 interop 메서드가 메모리 누수를 유발할까요? 아니면 interop 시스템이 마샬링 된 배열을 해제 할 것인지 알고 있습니까?

데이비드 헤퍼 넌

두 번째 옵션을 사용하면 누수가 없습니다. 마샬 러는 단순히 배열을 고정하고 고정 된 개체의 주소를 관리되지 않는 함수에 전달합니다. 관리되지 않는 함수가 반환되면 배열이 고정 해제됩니다.

고정은 blittable 유형의 배열에 대한 최적화입니다. 블리트 할 수없는 유형의 배열을 전달하면 마샬 러가 모든 메모리 수명을 처리합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

TPL 및 메모리 관리

분류에서Dev

IOS 메모리 및 메모리 관리

분류에서Dev

계층 순서 및 들여 쓰기와 관련된 쿼리

분류에서Dev

중첩 된 연관 및 그룹이있는 Rails 쿼리 (관련 객체 별)

분류에서Dev

메모리 캐시와 관련된 포인터 성능

분류에서Dev

재귀와 관련된 메모리 오류

분류에서Dev

DNS 레코드 관리와 관련된 몇 가지 쿼리

분류에서Dev

메모리 관리 이해

분류에서Dev

Java에서 사용 가능한 메모리와 관련된 스레드 수 관리

분류에서Dev

Cloud Run의 컨테이너 메모리 관리 및 OOM

분류에서Dev

다중 처리는 코어 및 스레드와 어떤 관련이 있습니까?

분류에서Dev

내 암호화와 관련된 쿼리

분류에서Dev

Get-ADUser와 관련된 쿼리

분류에서Dev

패턴 일치와 관련된 Node.JS 및 PostgresSQL 쿼리 문제

분류에서Dev

세션 및 요청 리피터와 관련된 Flask 보안 문제

분류에서Dev

커널 버전, 장치 트리 및 빌드 루트와 관련된 혼동

분류에서Dev

""N에 추가되는 모든 쌍 찾기 "면접 과제에 관련된 메모리 및 작업의 양을 줄이려면 어떻게해야합니까?

분류에서Dev

malloc 및 무료로 메모리 관리

분류에서Dev

Webassemly 메모리 관리 및 포인터

분류에서Dev

AWS Fargate 및 메모리 관리

분류에서Dev

JavaScript 클로저 및 메모리 관리

분류에서Dev

C ++ 메모리 관리-스택 및 힙

분류에서Dev

Entity Framework 메모리 관리 및 폐기?

분류에서Dev

메모리와 관련된 모든 현재 파일 안전에 대한 gunzip

분류에서Dev

명령 메모리 및 속도와 관련하여 C의 매크로와 함수의 차이점

분류에서Dev

Autowiring 및 빈 주입과 관련된 외부 Java 라이브러리 문제

분류에서Dev

.exe에 포함 된 바이너리 리소스 및로드시 메모리 관리

분류에서Dev

데이터베이스 모델 및 관련 SQL 쿼리 설계

분류에서Dev

배열의 메모리를 늘리는 방법이 있습니까? 및 관련 문제

Related 관련 기사

  1. 1

    TPL 및 메모리 관리

  2. 2

    IOS 메모리 및 메모리 관리

  3. 3

    계층 순서 및 들여 쓰기와 관련된 쿼리

  4. 4

    중첩 된 연관 및 그룹이있는 Rails 쿼리 (관련 객체 별)

  5. 5

    메모리 캐시와 관련된 포인터 성능

  6. 6

    재귀와 관련된 메모리 오류

  7. 7

    DNS 레코드 관리와 관련된 몇 가지 쿼리

  8. 8

    메모리 관리 이해

  9. 9

    Java에서 사용 가능한 메모리와 관련된 스레드 수 관리

  10. 10

    Cloud Run의 컨테이너 메모리 관리 및 OOM

  11. 11

    다중 처리는 코어 및 스레드와 어떤 관련이 있습니까?

  12. 12

    내 암호화와 관련된 쿼리

  13. 13

    Get-ADUser와 관련된 쿼리

  14. 14

    패턴 일치와 관련된 Node.JS 및 PostgresSQL 쿼리 문제

  15. 15

    세션 및 요청 리피터와 관련된 Flask 보안 문제

  16. 16

    커널 버전, 장치 트리 및 빌드 루트와 관련된 혼동

  17. 17

    ""N에 추가되는 모든 쌍 찾기 "면접 과제에 관련된 메모리 및 작업의 양을 줄이려면 어떻게해야합니까?

  18. 18

    malloc 및 무료로 메모리 관리

  19. 19

    Webassemly 메모리 관리 및 포인터

  20. 20

    AWS Fargate 및 메모리 관리

  21. 21

    JavaScript 클로저 및 메모리 관리

  22. 22

    C ++ 메모리 관리-스택 및 힙

  23. 23

    Entity Framework 메모리 관리 및 폐기?

  24. 24

    메모리와 관련된 모든 현재 파일 안전에 대한 gunzip

  25. 25

    명령 메모리 및 속도와 관련하여 C의 매크로와 함수의 차이점

  26. 26

    Autowiring 및 빈 주입과 관련된 외부 Java 라이브러리 문제

  27. 27

    .exe에 포함 된 바이너리 리소스 및로드시 메모리 관리

  28. 28

    데이터베이스 모델 및 관련 SQL 쿼리 설계

  29. 29

    배열의 메모리를 늘리는 방법이 있습니까? 및 관련 문제

뜨겁다태그

보관