home..

Til New Keyword

2022년 8월 17일 Today I learned

Table of contents

new 키워드를 이용한 동적 메모리 할당

C++은 다음과 같은 세 가지 기본 타입의 메모리 할당을 지원한다.

동적 할당은 컴퓨터 내에서 어떻게 이루어지는가?

컴퓨터에서 응용 프로그램이 실행되면 해당 프로그램이 사용할 수 있는 메모리가 주어진다. 그 메모리는 코드 영역, 스택, 힙 등 각각 다른 용도로 나눠져 사용된다.
메모리를 동적으로 할당할 때에느느 운영 체제에 프로그램 사용을 위해 해당 메모리의 일부를 예약하도록 요청해야 한다. 이 요청을 수행할 수 있으면(프로그램이 요청하는 만큼의 크기가 메모리에 남아있을 때) 해당 메모리의 주소가 응용 프로그램에 반환된다. 그 시점부터 프로그램은 해당 메모리를 원하는 대로 사용할 수 있다. 응용 프로그램이 메모리 사용을 완료하면 이 메모리를 다시 운영체제로 반환하여 다른 프로그램에 제공할 수 있다. 사용했던 데이터를 삭제하는 과정 없이 주소를 운영체제에 돌려주면 해당 메모리는 다른 프로그램에 의해 덮어씌워질 수 있다.

댕글링 포인터

할당이 해제된 메모리를 가리키는 포인터를 댕글링 포인터(dangling pointer)라고 한다. C++은 할당되지 않은 메모리의 내용이나 삭제되는 포인터의 값에 대해서는 보장하지 않기 때문에, 댕글링 포인터를 역참조하거나 삭제하면 정의되지 않는 동작이 발생한다.
메모리를 할당 해제하면 여러 개의 댕글링 포인터가 생성될 수 있다. 의미없는 댕글링 포인터가 발생하는 것을 막기 위해 ① 여러 포인터가 같은 동적 메모리를 가리키는 것을 피해야 하며, ② 포인터를 삭제할 때 포인터를 0 또는 nullptr로 설정하는 편이 좋다.

int *ptr = new int;
// int *otherPtr = ptr;  이런 식의 이중 참조는 피하는 것이 좋다.

delete ptr;
ptr = 0;   // now ptr is nullptr not dangling pointer

출처 : https://boycoding.tistory.com/204






© 2023 objectio   •  Powered by Soopr   •  Theme  Moonwalk