C++더미 와 창고 의 차이 점 과 연계 설명

C++에서 메모 리 는 5 개의 구역 으로 나 뉜 다.쌓 기,창고,자유 저장 구역,전역/정적 저장 구역 과 상수 저장 구역 이다.
  • 스 택:컴 파일 러 가 필요 할 때 자동 으로 분배 되 고 필요 하지 않 을 때 자동 으로 지 워 지 는 변수 저장 소 입 니 다.보통 부분 변수,함수 파라미터 등 을 저장 합 니 다.
  • 더미:new 에서 분 배 된 메모리 블록 으로 프로그래머 가 방출 합 니 다(컴 파일 러 는 상관 하지 않 습 니 다).보통 new 는 delete 와 대응 하고 new[]는 delete[]와 대응 합 니 다.프로그래머 가 풀 어 주지 않 았 다 면,       자원 은 운영 체제 가 프로그램 이 끝 난 후에 자동 으로 회수 된다.
  • 자유 저장 소:malloc 등 분 배 된 메모리 블록 으로 더미 와 매우 비슷 하 며 free 로 방출 합 니 다.
  • 전역/정적 저장 소:전역 변수 와 정적 변 수 는 같은 메모리 에 분 배 됩 니 다.(C 언어 에 서 는 전역 변 수 는 초기 화 되 지 않 은 것 과 초기 화 되 지 않 은 것 으로 나 뉘 는데 C+에 서 는 이러한 구분 이 없습니다.)
  • 상수 저장 소:이것 은 특수 저장 소 이 고 안에 상수 가 저장 되 어 있 으 며 수정 할 수 없습니다.
  • (메모:더미 와 자유 저장 소 는 같은 구역 에 불과 합 니 다.new 바 텀 구현 코드 에서 malloc 를 호출 했 습 니 다.new 는 malloc 스마트 화 된 고급 버 전 으로 볼 수 있 습 니 다)
    창고 와 의 토론
  •  관리 방식:쌓 인 자원 은 프로그래머 가 제어 합 니 다(memory 가 생기 기 쉽 습 니 다) leak), 스 택 자원 은 컴 파일 러 가 자동 으로 관리 하 므 로 손 으로 제어 할 필요 가 없습니다.
  •  시스템 응답:더미 에 대해 시스템 에 남 은 메모리 주 소 를 기록 하 는 링크 가 있다 는 것 을 알 아야 합 니 다.시스템 이 프로그램 신청 을 받 았 을 때 이 링크 를 옮 겨 다 니 며 첫 번 째 공간 이 신청 공간 보다 큰 노드 를 찾 아 삭제 해 야 합 니 다.   남 은 노드 링크 의 이 노드 를 제외 하고 이 노드 공간 을 프로그램 에 할당 합 니 다.(대부분의 시스템 은 이 메모리 공간의 첫 번 째 주소 에 이번 할당 의 크기 를 기록 합 니 다.그래 야 delete 가 이 메모 리 를 정확하게 방출 할 수 있 습 니 다. 공간,그리고 시스템 은 남 은 부분 을 빈 링크 에 다시 넣 습 니 다).스 택 에 대해 스 택 의 남 은 공간 이 신청 한 공간 보다 크 면 시스템 은 프로그램 에 메모 리 를 제공 합 니 다.그렇지 않 으 면 이상 알림 스 택 이 나 옵 니 다.
  •  공간 크기: 더 미 는 연속 되 지 않 는 메모리 영역(시스템 은 링크 로 남 은 메모리 주 소 를 저장 하기 때문에 연속 되 지 않 습 니 다)입 니 다.더 미 는 컴퓨터 시스템 에서 효과 적 인 가상 메모리(32bit)에 제한 을 받 습 니 다. 시스템 이론 상 4G)이기 때문에 쌓 인 공간 이 비교적 유연 하고 크다.스 택 은 연속 적 인 메모리 영역 입 니 다.크기 는 운영 체제 가 예약 한 것 입 니 다.windows 하 스 택 크기 는 2M(1M 도 있 습 니 다. 컴 파일 시 확인,VC 에서 설정 가능).
  •  파편 문제:쌓 기,잦 은 new/delete 는 대량의 파편 을 만들어 프로그램의 효율 을 떨 어 뜨 린 다. 스 택 에 대해 서 는 선진 적 인 후에 나 오 는 대열 로 출입 이 일일이 대응 하여 파편 이 생기 지 않 습 니 다.
  •  성장 방향:위로 쌓 아 올 리 고 높 은 주소 로 증가 합 니 다.스 택 아래로,낮은 주소 로 증가 합 니 다.
  •  할당 방식: 더 미 는 모두 동적 분배 이다.스 택 은 정적 분배 와 동적 분배 가 있 고 정적 분 배 는 컴 파일 러 에 의 해 이 루어 집 니 다(예 를 들 어 부분 변수 배분).동적 분 배 는 alloca 함수 에 의 해 이 루어 집 니 다. 나누다   배치 되 지만 스 택 의 동적 분 배 된 자원 은 컴 파일 러 에 의 해 방출 되 며 프로그래머 가 실현 할 필요 가 없습니다.
  •  분배 효율:쌓 기 는 C/C++함수 라 이브 러 리 에서 제공 되 고 메커니즘 이 복잡 합 니 다.그래서 창고 보다 쌓 는 효율 이 훨씬 낮 습 니 다.스 택 은 매우 시스템 이 제공 하 는 데이터 구조 로 컴퓨터 는 바 텀 에서 스 택 에 지원 하고 분배 전문 이다. 맡기다 스 택 주 소 를 저장 하고 스 택 작업 에 전문 적 인 명령 이 있 습 니 다.
  • 프로그램 예시
    아래 의 절 차 를 통 해 위의 개념 을 더욱 잘 이해 할 수 있다.
    
    int  b;  
    //main.cpp
    int  a  =  0;  //      
    char  *p1;    //       
    main(){int  b;           // 
    char  s[]  =  "abc";   //  
    char  *p2;         // 
    char  *p3  =  "123456";  // 123456/0    ,p3   。
    static int c = 0;      //   (  )    
    p1 =  (char *)malloc(10)
    p2 =  (char *)malloc(20)  //      10 20         。
    strcpy(p1, "123456");    // 123456/0     ,         p3    "123456"       。
    }
    소결:
    쌓 기와 창고 의 차 이 는 다음 과 같은 비유 로 알 수 있다.
    창 고 를 사용 하 는 것 은 우리 가 식당 에 가서 밥 을 먹 는 것 처럼 주문(신청),돈 지불,먹 기(사용)만 하고 배 부 르 면 간다.채 소 를 썰 거나 채 소 를 씻 는 등 준비 작업 과 설거지,냄비 닦 기 등 마무리 작업 에 신경 쓸 필요 가 없다.그의 장점 은 빠 르 지만 자유도 가 적다.더 미 를 사용 하 는 것 은 마치 자신 이 좋아 하 는 요 리 를 만 드 는 것 처럼 번 거 롭 지만 자신의 입맛 에 맞 고 자유도 가 크다.클래식!)
    총결산
    이상 은 이 글 의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가 치 를 가지 기 를 바 랍 니 다.여러분 의 저희 에 대한 지지 에 감 사 드 립 니 다.더 많은 내용 을 알 고 싶다 면 아래 링크 를 보 세 요.

    좋은 웹페이지 즐겨찾기