"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > C ++의 스택 vs. 힙 : 언제 각각을 사용해야합니까?

C ++의 스택 vs. 힙 : 언제 각각을 사용해야합니까?

2025-03-23에 게시되었습니다
검색:602

Stack vs. Heap in C  : When Should I Use Each?

Understanding Stack and Heap Usage in C

Managing memory effectively is crucial in C programming. 변수를 어디에서 보관 해야하는지 결정할 때는 스택과 힙 사이를 결정해야합니다.

스택 vs. 힙 : 수명의 문제

  • 대중의 신념과는 반대로 성능은 스택과 쌓기 사이를 선택하는 주요 요인이 아닙니다. 주요 차이점은 변수의 수명에 있습니다.
  • 스택 :

    는 해당 함수 내에서만 액세스 할 수있는 함수 내에 로컬 변수를 저장합니다. 이러한 변수는 기능 반환시 자동으로 파괴됩니다.

    힙 : 객체, 드물게 사용되는 변수 및 선언 기능을 오래 지속 해야하는 큰 데이터 구조

class Thingy;

Thingy* foo( ) 
{
  int a; // Stack-allocated integer
  Thingy B; // Stack-allocated Thingy object
  Thingy *pointerToB = &B; // Pointer to stack-allocated object
  Thingy *pointerToC = new Thingy(); // Heap-allocated Thingy object
  
  // Safe: Heap-allocated Thingy outlives foo()
  return pointerToC;

  // Unsafe: Stack-allocated Thingy will be destroyed upon foo() return
  return pointerToB;
}

  • Code Snippet 다음 :
  • class thaty; thingy* foo () { int a; // 스택 할당 정수 사물 b; // 스택 할당 된 물건 객체 thingy *pointertob = & b; // 스택 할당 된 객체에 대한 포인터 thingy *pointertoc = new thingy (); // heap-angolated thingy 객체 // SAFE : Heap-Allocated Thingy Ontives foo () Pointertoc 리턴; // 안전하지 않음 : stack-hallocated thingy는 foo () 반환에 파괴됩니다. 리턴 포인터; }
  • 이 예제에서 :

    a와 b는 foo ()에 로컬이기 때문에 스택에 저장됩니다. foo (). 기본 기계. "힙"과 "스택"은 컴파일러 발명품이며 컴퓨터의 메모리는 단순히 일련의 주소입니다. 통화 스택 및 호출 규칙과 같은 개념을 검사함으로써 기계가 기능을 실행하고 메모리를 관리하는 방법을 파악할 수 있습니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3