최근에 배열 크기에 관한 issue가 있어서 정리한다.
프로그램을 실행시키면 운영체제는 프로그램을 위해 메모리공간을 할당한다.
메모리공간은 아래 그림과 같이 Data, Heap, Stack으로 나뉘며 각 영역에는 목적에 맞는 변수들이 위치하게 된다.
Data, Stack영역에는 sizeof()함수를 이용하여 크기를 쉽게 확인할 수 있다.
sizeof 함수의 원형은 아래와 같다.
하지만 Heap영역에서는 동적으로 크기가 결정되므로 sizeof()함수로 크기를 확인 할 수 없다.
windows에서는 _msize() 함수를 이용한다. 함수 원형은 아래와 같다.
Linux에서는 malloc_usable_size()함수를 이용한다. 함수 원형은 아래와 같다.
아래 그림은 확인용 예제이다.
Example Result에서 확인 할 수 있다시피 sizeof(nArrHeap)의 경우 int * 의 크기인 8이 반환되는 것을 확인 할 수 있다.
_msize의 경우 Heap영역에 존재하는 메모리 위치만을 입력으로 받으므로 Data, Stack영역에 위치하는 메모리를 인자로 사용할 경우 동작되지 않는다.
참고 자료 1 : docs.microsoft.com/ko-kr/cpp/cpp/sizeof-operator?view=vs-2019
참고 자료 2 : docs.microsoft.com/ko-kr/cpp/c-runtime-library/reference/msize?view=vs-2019
참고 자료 3 : man7.org/linux/man-pages/man3/malloc_usable_size.3.html
'Programming > 일반' 카테고리의 다른 글
[Network] iperf - 통신 속도 및 처리량 확인 (0) | 2022.03.03 |
---|---|
에라토스테네스의 체 (0) | 2021.01.20 |
Log[2] - Macro (0) | 2020.08.17 |
Log[1] - assert() (0) | 2020.08.13 |
Vision Library (0) | 2020.07.16 |