• 카테고리

    질문 & 답변
  • 세부 분야

    데스크톱 앱 개발

  • 해결 여부

    해결됨

강사님 파일입출력(Callback함수)와 관련하여 질문 드립니다.

24.04.25 14:36 작성 24.04.25 14:46 수정 조회수 61

0

강의 내용중 비동기 입출력 CALLBACK 함수 사용 부분에서 OVERLAPPED 구조체와 BUFFER 를 동적할당 해야 한다고 하셨는데.

하지만 비동기 I/O를 하고 있는 스레드가 마지막 부분에서 SleepEx(1, TRUE) 로 대기하고 있습니다. 즉 스레드는 해당 CALL 함수 종료 후에도 계속 존재하기 때문에 스래드의 로컬변수로 선언해서 전달해도 CALLBACK 함수에서 사용하는데는 문제가 없는거 아닌지요? (이벤트로 처리하는 부분은 스레드 변수로 처리)

왜 동적변수로 할당해야 하는지 이해가 되지 않아서요?

실제로 제가 스레드내의 로컬 변수로 선언하고 동작 시켜도 정상적으로 동작을 해서요.

답변 2

·

답변을 작성해보세요.

1

감사합니다. 강사님

0

불가능한 것은 아니지만 적절하지는 않습니다. 비동기 요구를 OS에 요청할 경우 입/출력에 사용되는 메모리 공간에 대해 OS는 락을 겁니다. 따라서 자동변수의 메모리 주소를 전달할 경우 스택 메모리 공간에 락이 걸릴 수 있습니다.

그리고 무엇보다 스택의 크기는 스레드 당 1MB가 기본 입니다. 그런데 파일 입/출력의 단위는 경우에 따라 1MB를 넘길 수도 있습니다. 이렇게 되면 당연히 스택 메모리가 모두 소진되어 프로그램이 비정상 종료될 것입니다. 참고하시기 바랍니다. 😄