동적할당
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
'👩🏻💻기초지식 > C++' 카테고리의 다른 글
[C++] 스택프레임이란? EBP와 ESP (0) | 2023.08.17 |
---|---|
[C++] 함수 호출 규약이란? cdecl, stdcall, fastcall, thiscall 의 차이들? (0) | 2023.08.17 |
[C++] 구조체 특성, 패딩이란? 공용체란? (0) | 2023.08.17 |
[C++] 매크로 변수의 문제점은? (0) | 2023.08.17 |
[C++] 상수(const)의 역할과 종류 (0) | 2023.08.17 |