2012-05-06 4 views
-2

힙과 스택을 연구해야하는 곳에서 시험이 있습니다. 스택 부분은 이해하지만 힙이 문제가되고 있습니다.어셈블리 힙 ... 테스트를 위해 공부하려고 시도합니다.

우리 책은 C와 어셈블리 모두에서 우리에게 제공합니다. 그러나 나는이 개념들을 이해하는 데 어려움을 겪고있다.

나는 책의 스크린 샷을 올려서 멋지게 보일 것입니다.

질문 :

  • 어떻게 Heap_Init 작동합니까?

  • Heap_Allocate는 어떻게 작동합니까?

  • 힙 릴리즈는 어떻게 작동합니까?

    enter image description here

    enter image description here

당신의 시간과 노력에 대한 여러분 모두 감사합니다.

+1

-1. 죄송합니다. 좋은 결과를 보여 주어야하며 직면 한 문제와 관련된 구체적인 질문을하셔야합니다. –

답변

2

단어의 이런 의미에서 힙은 프로그램이 더 많은 양의 데이터를 저장하는 데 사용할 수있는 스택에없는 메모리 영역입니다.

그러나 프로그램 수명 동안 프로그램은 자체 메모리 사용을 추적해야합니다. 특히, 프로그램은 전체 가상 주소 공간에 쓸 수 없습니다. 기록하려는 주소가 운영 체제에 의해 매핑되지 않아 액세스 위반이 발생하면 프로그램이 segmentation fault을 수신하고 종료됩니다.

따라서 실행중인 프로그램은 운영 체제에 약간의 공간을 할당해야합니다. 가능한 경우 운영 체제가이를 수행하여 해당 공간을 가상 주소 공간에 매핑합니다.

그러나 메모리의 일부를 해제해야하는 경우 메모리가있는 위치와 그 위치를 알고 있어야합니다. 또한, 프로그램이 특정 크기의 메모리를 어디에 저장할 것인지를 알아야합니다. 많은 일들이 매우 빠르게 복잡해집니다. C에서 할당 한 메모리를 많이 사용하고 다시 빈 공간을 자주 사용한다면 할당과 해제 사이에 1-1 맵을 갖는 것이 적절하지 않습니다. 같은 효과. 대신, 메모리 할당자가 방금 운영 체제에서 큰 메모리 덩어리를 꺼낸 다음 그 사실을 추적하면 더 좋을 것입니다.

할당 구조가 현재 사용되고있는 것을 추적하기위한 저장 구조에 대한 필요성을 입력하고 사용을 위해 가상 주소 공간의 범위를 표시하십시오.

그래서,

  • Heap_Init는이 구조를 설정하고 아마 현대의 할당에, 일부 메모리를 초기화한다.
  • Heap_Allocate는이 구조를 사용하고 요청이 주어지면 사용 가능한 공간에 대한 포인터를 반환합니다. 이것은 프로그램이 OS에서 더 많은 공간을 요구할 수도,하지 않을 수도 있습니다.
  • Heap_Free는 이전에 할당 된 메모리를 해제하는 구조를 사용합니다.

이러한 기능이 수행하는 이론입니다. 코드를 보면 특정 구현이 수행중인 작업을 처리 할 수 ​​있어야합니다.

+0

감사합니다 youuuuuuu ... 작은 부탁을 드릴까요? Heap_Init (10 줄만)과 같은 라인 별 설명을 사용하여 답변을 편집 할 수 있다면 시도하려는 내용에 대해 완전히 혼란스러워 할 것입니다. – bluejamesbond

+0

@bluejamesbond 나는 할 수 있었다. 그러나 그것은 당신의 학습 운동의 요점을 망칠 수있다. 그렇지 않습니까? ;) –

+0

정말 운동은 아닙니다. 그것은 단지 시험을 위해 공부하고 있습니다. 나는 아직 배우려고하지 않고 교수에게 이메일을 보내고 싶지 않다. – bluejamesbond

관련 문제