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

[C++] new/malloc과 delete/free 차이는? 가상 메모리 할당 함수란?

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

동적할당

new, malloc 차이

- new는 자료형 단위로 메모리를 할당하고, malloc은 바이트 단위로 메모리를 할당한다.

- new는 생성자를 호출하고, malloc은 생성자를 호출하지 않는다.

 

delete, free 차이 

- delete는 소멸자를 호출하고, free는 호출하지 않는다.

virtualalloc - virtualfree : 가상 메모리 할당함수

- new를 호출하면 내부에서 malloc을 호출하고, malloc 내부에서 heapalloc을 호출한 뒤, heapalloc 내부에서 virtualalloc

을 호출한다.

- new의 내부에 malloc만 호출할 수 있는 것처럼 virtualalloc만도 호출할 수 있다.

- Win32에서 추가된 가상 메모리 할당 함수는 malloc 함수, new 연산자에 비해 몇가지 추가적인 이점을 제공하여 메모리

에 대한 좀 더 섬세한 통제를 할 수 있다.

 

virtualalloc (LPVOID VirtualAlloc(LPVOID lpAddress, DWORD dwSize, DWORD flAllocationType, DWORD flProtect))

- 가상메모리 할당

- Win32 프로세스가 가지는 4G의 가상 주소공간은 "페이지"라는 단위로 구성되기 때문에, 가상 메모리를 할당할 때는 바이

트 단위를 사용하지 않고 페이지 단위를 사용한다.

virtualfree (BOOL VirtualFree(LPVOID lpAddress, DWORD dwSize, DWORD dwFreeType))

- 가상메모리 해제

가상 메모리 할당함수 이점

1. 메모리를 예약 상태로 할당할 수 있다.

- 예약이란 물리적인 메모리를 소비하지 않으면서 주소 공간만을 미리 할당해 놓는 방법이다. 예약된 페이지는 필요

할 때 언제든지 필요한 부분만 확정해서 사용할 수 있으므로 realloc 호출을 줄일 수 있다.

2. 할당한 메모리의 액세스 권한(접근권한)을 지정할 수 있다.

- malloc으로 할당한 메모리는 언제나 읽기/쓰기가 가능하지만, 가상 메모리 함수로 할당한 메모리는 읽기 전용/액세스 금

지 속성을 가질 수 있어 실수로 인한 데이터 파괴를 막을 수 있다.

(개인적으로 찾은 추가정보) calloc, realloc

void *calloc(size_t num, size_t size);

- size 크기의 변수값 num개 분에 해당하는 메모리를 할당한다.

- malloc과 동일하지만, 다만 필요한 메모리 양을 좀 더 논리적으로 나타낸다는 점만 다르다.

void *realloc(void* memblock, size_t size);

- 이미 할당된 메모리의 크기를 변경하여 재할당하는 함수이다.

- 이미 할당한 메모리를 더 크게 할당하거나 더 작게 축소하고자 할 때 사용한다.

- 메모리 확장 시에는 연속된 공간에 재할당하기 위해 메모리의 위치가 변경될 수 있다.


https://3dmpengines.tistory.com/1408

 

가상 메모리 할당 함수(VirtualAlloc), 예약, 확정, 보호속성, 대용량 메모리 할당

http://blog.naver.com/ultimidou/130095833416http://blog.naver.com/PostView.nhn?blogId=kimgudtjr&logNo=140116 메모리 - 가상 메모리 할당 함수, VirtualAlloc, 예약, 확정, 보호속성, 대용량 메모리 할당 [ C 런타임 함수 ] 응용

3dmpengines.tistory.com

 

728x90