2017-12-02 2 views
1

재귀 함수의 매개 변수를 기반으로 재귀 함수의 특정 스택 프레임이 바이트 단위로 계산할 수 있거나 적어도 얼마만큼의 메모리를 사용하고 싶습니다.재귀 함수의 스택 프레임에서 사용하는 메모리를 어떻게 계산하거나 근사 할 수 있습니까?

예를 들어, sample_recursive_function (int [] array, int n)과 같은 재귀 함수의 스택 프레임은 어느 정도의 메모리를 차지합니까?

+1

특정 언어로 태그 ​​할 수 있습니까? 나는 C/C++ 또는 Java를 추측하고 있습니다. –

+0

저는 주로 Java에 관심이 있습니다 –

답변

1

인수의 크기에 상수 주소 크기를 더한 값으로 근사값을 구할 수 있습니다. int []는 포인터 유형 (java, C++ 또는 C#의 경우)이며 4 또는 8 바이트를 사용합니다 (코드가 32 또는 64 비트에서 실행되는지 여부에 따라 다름) int는 4 바이트이고 반환 값은 주소는 또한 4 또는 8 바이트입니다. 따라서이 함수의 최적화 된 스택 프레임은 64 비트에서 32 비트에서 12 바이트, 패딩으로 인해 32 바이트가됩니다. 디버그 모드에서 실행 중일 때는 여분의 바이트가 사용될 수 있습니다. 또한 함수의 모든 지역 변수도 스택 프레임의 크기에 추가됩니다. 세부 정보는 좀 더 복잡 할 수 있습니다.

+1

스택 프레임에 사용되는 메모리의 양은 매개 변수의 데이터 유형에 사용되는 메모리 양과 로컬 변수 및 반송 주소 크기와 같은 다른 상수입니까? –

+1

@sidharthramanan : 맞습니다. 지역 변수는 상수가 아니지만 그렇지 않습니다. 실제로는 변수의 크기 일 뿐이며 변수의 크기는 아닙니다. 따라서 클래스 유형에 대한 참조 변수는 4 또는 8 바이트 만 사용합니다. – PMF

관련 문제