์ ์ ํ ๋น์ผ๋ก ๋ง๋ค์ด์ง ๋ณ์๋ DATA์์ญ์ ์ ์ฅ๋๋๋ฐ,
๋์ ํ ๋น์ผ๋ก ๋ง๋ค์ด์ง ๋ณ์๋ HEAP์์ญ์ ์ ์ฅ๋๋ค.
DATA ์์ญ์ ํ ๋น๋ ๋ณ์์ ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ๋ sizeof ์ฐ์ฐ์๋ก ํฌ๊ธฐ๋ฅผ ๋ถ๋ฌ ์ฌ ์ ์์ง๋ง,
HEAP ์์ญ์ ํ ๋น๋ ๋ณ์์ ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ๋ sizeof ์ฐ์ฐ์๋ก ๋ถ๋ฌ์ฌ ์ ์๋ค. _msize ์ฐ์ฐ์๋ก ๋ถ๋ฌ์์ผ ํ๋ค.
* ์ ์ ํ ๋น์ผ๋ก ๋ง๋ ๋ฐฐ์ด์ ํฌ๊ธฐ ๊ตฌํ๊ธฐ
int arr[5];
int arr_size = sizeof(arr) / sizeof(int);
* ๋์ ํ ๋น์ผ๋ก ๋ง๋ ๋ฐฐ์ด์ ํฌ๊ธฐ ๊ตฌํ๊ธฐ
#include <iostream>
#include <malloc.h> // _msize() ์ฌ์ฉ์ ์ํด malloc.h ํค๋ ์ถ๊ฐ!
using namespace std;
int main(){
int n = 10;
int *arr = new int[n](); // ()๋ฅผ ๋ถ์ฌ์ฃผ๋ฉด 0์ผ๋ก ์ด๊ธฐํ ๋จ!
cout << _msize(arr) << "\n"; // 40
cout << _msize(arr)/sizeof(int) << "\n"; // 10
delete arr[];
return 0;
}
-> _msize(arr)์ด 40์ธ ์ด์ ๋ ๋ฐฐ์ด์ intํ์ผ๋ก ๋ง๋ค์์ผ๋ฉด ๋ฐฐ์ด์ ํฌ๊ธฐ์ * 4byte๋ฅผ ํด์ฃผ๋ฏ๋ก, ์ด 40 byte ํฌ๊ธฐ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น๋ฐ๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋์ int ํฌ๊ธฐ๋ก ๋๋ ์ค์ผ ์ฐ๋ฆฌ๊ฐ ์ํ๋ ์ฐ ๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ ๊ตฌํ ์ ์๋ค.
* ๋ฉ๋ชจ๋ฆฌ ์ข ๋ ์์ธํ ์์๋ณด๊ธฐ
DATA ์์ญ์ ์ ์ญ ๋ณ์์ ์ ์ ๋ณ์๊ฐ ์ ์ฅ๋๋ ์์ญ์ด๋ฉฐ, ํ๋ก๊ทธ๋จ ์ข ๋ฃ ์ ๊น์ง ์ฌ๋ผ์ง์ง ์๊ณ ๋จ์์๋ค.
HEAP ์์ญ์ ํ๋ก๊ทธ๋๋จธ์ ์ํด ํ ๋น๋๊ณ ํด์ ๋๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ด๋ค.
STACK ์์ญ์ ์ง์ญ ๋ณ์์ ๋งค๊ฐ ๋ณ์๊ฐ ํ ๋น๋๊ณ ํจ์๋ฅผ ๋น ์ ธ๋๊ฐ๋ฉด ์๋์ผ๋ก ์๋ฉธ๋๋ค.
๋ฐ๋ผ์ ํ๋ก๊ทธ๋จ ์ ์ ์ํ ์ ์ DATA ์์ญ์ ํ ๋นํ ๋ณ์์ ํฌ๊ธฐ๋ฅผ ๋ฏธ๋ฆฌ ์ง์ ํ๋ ๊ฒ๊ณผ HEAP ์์ญ์ ํ ๋นํ ๋์ ๋ณ์๋ฅผ ํจ์ ๋์์ ํด์ ์ํค๋ ๊ฒ์ด๋ค.
DATA์์ญ์ ํ ๋นํ ๋ณ์๋ ํ๋ก๊ทธ๋จ ์ปดํ์ผ ์์ ํฌ๊ธฐ๋ฅผ ํ ๋นํ๋ค. ๋ฐ๋ผ์ ์ ์ ๋ฐฐ์ด ์ ์ธ ์, ํฌ๊ธฐ๋ฅผ ๊ฐ๋ณ์ ์ผ๋ก ๋ช ์ํ๋ฉด ์ปดํ์ผ ์๋ฌ๋ฅผ ๋ฐ์์ํจ๋ค.
๋ํ, HEAP ์์ญ์ ํ ๋นํ ๋ณ์๋ ํ๋ก๊ทธ๋๋จธ์ ์ํด ํ ๋น๋๊ณ ์๋ฉธ๋๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด๋ฏ๋ก ๋ฐ๋์ ์ฌ์ฉ ํ, ํด์ ์์ผ์ฃผ๋ ๊ฒ์ ์์ง ๋ง์!