2011-10-06 3 views
1

가능한 중복 :
What and where are the stack and heap스택이란 무엇이며 왜 malloc은 오버플로를 방지합니까?

나는 C 언어에 새로운 오전, 나는 주로 매일 사용을 위해 파이썬을 사용하기 때문에 나는이 개념에 익숙하지 않다. 이전 질문에서 나는 여기 물었다 : Big array gives segmentation error in C이 질문에 나를 이끌었다. 그래서 스택이란 무엇이며, malloc과 스택의 관계는 무엇입니까?

답변

1

스택 및 힙에 대한 정보는 http://ee.hawaii.edu/~tep/EE160/Book/chap14/subsection2.1.1.8.html입니다.

malloc은 스택이 아니라 힙에서 메모리를 할당합니다 (스택 및 힙에 대한 읽기). 그래서 스택이 오버플로되지 않도록합니다. :) long long 타입의 배열을 선언하면 고정 크기가 할당되고 해당 메모리는 스택에서 가져옵니다. 그러나 malloc은 요구 사항 (즉, 배열에 저장해야하는 요소의 수)에 따라 크기를 동적으로 할당합니다.

추신 : 파이썬 메모리 할당에서 당신을 위해 돌봐줍니다. 당신은 프로그래머로 응석을 받았습니다 : D. C는 시스템에 더 가깝기 때문에 C의 작업을 이해하는 데 상당한 양의 시스템 지식이 필요합니다.

0

malloc은 스택이 아닌 힙에 공간을 할당합니다.

스택은 각 기능의 로컬 변수 및 매개 변수에 사용되는 공간입니다.

즉, 모든 함수는 로컬 변수에 스택을 사용합니다. Malloc은 완전히 다른 힙에 메모리를 사용합니다.

0

wiki에는 call_stack에 대한 설명이 있습니다.

mallocheap에 할당 된 시스템에서 메모리를 신청하는 데 도움이됩니다.

0

malloc은 오버플로가 발생하지 않도록 방지하지 못합니다. 스택을 과도하게 사용하지 않으면 오버플로가 발생하지 않습니다. 물론 과도한 스택 사용을 피하려면 작업 데이터를 저장할 다른 곳이 필요할 것입니다. 여기에 malloc이 있습니다.

관련 문제