2013-08-31 3 views
0

컴퓨터 메모리에서 IA32라고 말하면 일반적으로 스택 범위는 무엇입니까? 나는 0xffff1234와 같은 주소가 아마 스택에 있다는 것을 안다. 스택이 0x0800abcd로 증가 할 수 있습니까? 예를 들면? 힙은 어때? 나는 힙 주소가 스택 주소보다 항상 낮다는 것을 알고 있지만 일반적으로 그 범위는 무엇입니까? 또한 힙 아래 영역은 무엇입니까?스택 및 메모리의 주소 범위는 무엇입니까?

스택 - 프로그램이 실제로 프로그램을 실행하기 위해 사용하는 메모리. 여기에는 로컬 변수, 콜백 (call-back) 데이터가 포함됩니다 (예를 들어, 함수를 호출하면 스택은 상태를 저장하고 새로운 함수를 입력하기 전에 코드에 넣었습니다). 일반적으로 스택을 직접 제어하지는 않으며 변수와 데이터는 파괴되며 함수 범위를 안팎으로 이동할 때 만들어집니다.

힙 - 프로그램의 "동적"메모리. 새 객체 또는 변수를 동적으로 만들 때마다 힙에 저장됩니다. 이 메모리는 프로그래머가 직접 제어하므로 객체 생성 및 삭제를 처리해야합니다.

고맙습니다.

답변

0

스택 : 당신은 시간을 연결에서 스택의 크기를 정의 할 수 있습니다. 아시다시피, Windows 앱의 기본 스택 크기는 2MB입니다. 프로젝트 설정에서 스택 크기를 변경할 수 있습니다. 그러나 App이 빌드되면 스택 크기가 고정됩니다. OS가 스택 오버플로에 대한 보호 페이지를 설정합니다. 어떤 작업이 가드 페이지에 액세스하려고하면 EXCEPTION이 트리거됩니다.

힙 : 나는 또한 생각 기본 힙 크기는 프로젝트 설정에서 변경할 수 있습니다. 응용 프로그램에서 자신 만의 힙을 만들거나 CRT 힙, Win32 힙을 사용할 수 있습니다. 따라서 힙이 많이 있어야합니다. 메모리를 할당하려고하면 힙 관리자가 알고리즘을 기반으로 메모리를 할당합니다. 메모리가 충분하지 않은 경우 힙 관리자는 가상 메모리 관리자로부터 메모리를 신청합니다. 사용자 주소 공간에 메모리가 충분하지 않을 때까지 Out of Memory를 throw하십시오. HeapNode, HeapSegment, LFH, LEA, BEA 등 여러 가지 정의가 있습니다. Windbg :! heap -s,! heap -a를 사용하여 Windows 힙 구조를 확인할 수 있습니다.

관련 문제