C API로 확인된 스토리지를 Fortran 으로 정렬

4963 단어 fortrantech
C의 API에 메모리가 확보된 경우 주소의 함수만 반환됩니다.
#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>

int* myalloc() {
  int* ptr = (int*) malloc(4 * sizeof(int));
  ptr[0] = 1;
  ptr[1] = 2;
  ptr[2] = 3;
  ptr[3] = 4;
  return ptr;
}
예를 들어 이렇게 myalloc 확보된 메모리를Fortran에서 그룹으로 사용할 때 다음과 같다.
program f1
  use iso_c_binding
  interface
    function myalloc() bind(c)
      import c_ptr
      type(c_ptr) myalloc
    end function
  end interface

  type(c_ptr) addr
  integer, pointer :: array(:)

  addr = myalloc()
  call c_f_pointer(addr, array, [4])

  print *, array ! [1, 2, 3, 4]
end
c_f_pointertype(c_ptr)의 주소 값을Fortran의 바늘로 변환하는 함수입니다.세 번째 매개 변수에서 배열된 shape를 사용할 수 있습니다.

참고 자료

  • (gcc) 9.53 C_F_POINTER — Convert C into Fortran pointer
  • (nag) Fortran Tip 세트: C와의 상호 활용 가능성의 예
  • 좋은 웹페이지 즐겨찾기