👩🏻‍💻기초지식/C++

[C++] 지역변수, 전역변수, 동적변수란? malloc과 new의 공통점 차이점은?

공대 컴린이 2023. 8. 17. 11:02
728x90

지역변수 static

- Stack영역에 저장되고, 특정 함수나 특정 스코프 내에서 선언되어 사용된다.
- 즉, Block화 되어있는 공간에 선언된 변수를 의미

- 최초 할당되는 호출 시점에 생성된다.

전역변수 extern

- Data영역에 저장되고, 프로그램 전체에서 사용할 수 있는 변수로 함수 외부에서 선언된다.
- static 변수, extern 변수나 클래스 외부에 선언된 변수를 의미

- 컴파일이 완료되었을 때(프로그램이 시작될 때) 생성된다.

동적변수

- 런타임 중에 new 나 malloc을 이용하여 동적으로 메모리가 할당된 변수
- Heap 영역에 저장된다.

 

malloc과 new의 공통점

사용할 연속적인 메모리 공간을 할당한다.
- 메모리를 할당하고 free와 delete로 메모리를 해제해야 한다.

malloc과 new의 차이

- malloc은 바이트 단위의 할당이고, new는 클래스 크기 단위의 할당이다.
- 따라서 malloc은 리턴타입이 void* 형이므로 sizeof() 함수로 사이즈를 매개변수로 전달하고, new는 할당하는 타입을 지정하면 알아서 할당하는 타입의 포인터로 사이즈가 넘어온다.
- malloc은 stdlib.h 라이브러리에서 제공해주는 함수이고, new는 C++에서 기본으로 제공되는 키워드로 라이브러리 추가 없이 사용할 수 있다.
- malloc은 메모리를 동적으로 할당하는것만이 목적이므로 초기값을 지정할 수 없고, new는 할당과 동시에 초기화할 수 있다.
- 따라서 new를 이용한 오브젝트 생성만이 메모리 할당 후 오브젝트 생성 직후에 생성자를 호출한다.


https://jhtop93.tistory.com/3

 

malloc과 new의 차이

C++에서는 메모리 동적 할당을 위해 malloc과 new 둘 다 쓸 수 있습니다. 둘의 차이점에 대해 알아봤습니다. 1. malloc은 라이브러리 제공 함수로, stdlib.h 을 include 해주어야 사용 가능하지만, new는 기본

jhtop93.tistory.com

728x90