>  기사  >  백엔드 개발  >  스택과 힙에서 생성될 때 객체에 대한 참조는 어디에 저장됩니까?

스택과 힙에서 생성될 때 객체에 대한 참조는 어디에 저장됩니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-27 01:52:13914검색

Where are References to Objects Stored when Created on the Stack vs. the Heap?

스택 또는 힙에서 객체 생성:

질문이 생깁니다. 스택과 힙에서 객체를 생성할 때 참조는 어디에 있습니까?

C에서 객체 스토리지는 컨텍스트, 즉 스토리지에 따라 결정됩니다. 기간:

객체 o는 다음을 사용하여 객체를 생성합니다.

  • 자동 저장: 함수 내에서 로컬로 선언된 경우 객체는 다음에 상주합니다. 스택.
  • 정적 저장소: 네임스페이스 또는 파일 범위에서 선언된 경우 개체는 스택 또는 힙 외부 전용 메모리 영역에 배치됩니다.
  • 멤버 변수: 다른 객체 내의 하위 객체로 선언되면 포함하는 객체의 저장소를 상속받습니다. 기간.

객체* o는 자동 저장 기능을 갖춘 포인터를 생성합니다.

포인터는 다른 객체와 마찬가지로 스택에 할당됩니다. 저장 기간은 초기화 표현식이 아니라 컨텍스트에 따라 결정됩니다.

예를 들어 아래 코드 조각에서

struct Foo {
    Object o;
};

Foo foo, f;
Foo* p = new Foo;
Foo* pf = &f;
  • foo.o에는 정적 저장 공간이 있지만 둘 다 없습니다. foo 자체에는 정적 저장소가 있으므로 스택이나 힙에 있습니다.
  • f.o에는 자동 저장소가 있으며, f에는 자동 저장소가 있으므로 스택에 상주합니다. 저장소.
  • p->o에는 *p에 동적 저장소가 있으므로 힙에 동적 저장소가 있습니다.
  • pf->o와 f.o는 pf가 직접 가리키므로 동일한 객체를 참조합니다. to f.

요약하면 객체 저장 위치는 해당 컨텍스트에만 의존하는 반면 포인터는 항상 스택에 할당되지만 다양한 저장소의 객체를 참조할 수 있습니다. 기간입니다.

위 내용은 스택과 힙에서 생성될 때 객체에 대한 참조는 어디에 저장됩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.