9466번 - 텀 프로젝트
어디서 초과가 나는 지는 알고 있습니다.
cal 함수 내에서 동적할당 해준 check 배열이 메모리 초과의 원인이더라구요
그래서 전역 변수로 check를 선언해주었더니 메모리 초과는 일어나지 않았습니다.
그런데 여기서 의문이 드는 점은,
전역변수로 선언해준 것과 cal이 호출될 때마다 새롭게 동적할당 해주는 방법 중에
후자가 오히려 더 메모리를 적게 쓰는 것이 아닌가요?
for문을 통해서 cal이 input번 호출이 될 텐데, 그럴 때마다 input만큼 check배열을
동적할당 하는데 cal이 종료되면서 이 동적할당된 메모리 공간도 반납하는것이 아닌가요?
반면 전역변수는 프로그램이 종료되기 전까지 메모리를 잡고 있으므로 되려 동적할당을 해준 것이
메모리를 적게 소모하는 것이 아닌가 싶었는데, 아니란 말이죠?
그 이유가 궁금합니다.
할당한 배열을 해제하는 방법이 저게 맞나요?
일단 delete check가 아닌 delete[] check가 되어야 합니다.
그리고 동적으로 할당받은 배열은 함수가 종료된다고 자동으로 메모리가 해제되지 않습니다. 따라서 cal 함수 내부에서 중간에 return하는 곳마다 먼저 delete가 선행되어야 종료 시 메모리를 올바르게 해제할 수 있습니다.
하지만 메모리를 할당받고 해제하는 작업 자체가 그 크기에 비례하는 시간을 요구하기 때문에 이를 함수 호출 시마다 반복하는 것 자체가 비효율적입니다.
댓글을 작성하려면 로그인해야 합니다.
sungdd2 4년 전
어디서 초과가 나는 지는 알고 있습니다.
cal 함수 내에서 동적할당 해준 check 배열이 메모리 초과의 원인이더라구요
그래서 전역 변수로 check를 선언해주었더니 메모리 초과는 일어나지 않았습니다.
그런데 여기서 의문이 드는 점은,
전역변수로 선언해준 것과 cal이 호출될 때마다 새롭게 동적할당 해주는 방법 중에
후자가 오히려 더 메모리를 적게 쓰는 것이 아닌가요?
for문을 통해서 cal이 input번 호출이 될 텐데, 그럴 때마다 input만큼 check배열을
동적할당 하는데 cal이 종료되면서 이 동적할당된 메모리 공간도 반납하는것이 아닌가요?
반면 전역변수는 프로그램이 종료되기 전까지 메모리를 잡고 있으므로 되려 동적할당을 해준 것이
메모리를 적게 소모하는 것이 아닌가 싶었는데, 아니란 말이죠?
그 이유가 궁금합니다.