본문 바로가기

Programming/일반

배열 크기 확인

최근에 배열 크기에 관한 issue가 있어서 정리한다.

 

프로그램을 실행시키면 운영체제는 프로그램을 위해 메모리공간을 할당한다.

메모리공간은 아래 그림과 같이 Data, Heap, Stack으로 나뉘며 각 영역에는 목적에 맞는 변수들이 위치하게 된다.

메모리 공간 구성

Data, Stack영역에는 sizeof()함수를 이용하여 크기를 쉽게 확인할 수 있다.

sizeof 함수의 원형은 아래와 같다.

Micorsoft Docs sizeof()

하지만 Heap영역에서는 동적으로 크기가 결정되므로 sizeof()함수로 크기를 확인 할 수 없다.

windows에서는 _msize() 함수를 이용한다. 함수 원형은 아래와 같다.

Microsoft Docs _msize()

Linux에서는 malloc_usable_size()함수를 이용한다. 함수 원형은 아래와 같다.

Linux man-pages malloc_usable_size()

아래 그림은 확인용 예제이다.

Example Code
Example Result

Example Result에서 확인 할 수 있다시피 sizeof(nArrHeap)의 경우 int * 의 크기인 8이 반환되는 것을 확인 할 수 있다.

_msize의 경우 Heap영역에 존재하는 메모리 위치만을 입력으로 받으므로 Data, Stack영역에 위치하는 메모리를 인자로 사용할 경우 동작되지 않는다.

 

참고 자료 1 : docs.microsoft.com/ko-kr/cpp/cpp/sizeof-operator?view=vs-2019

 

sizeof 연산자

sizeof 연산자sizeof Operator 이 문서의 내용 --> 형식의 크기를 기준으로 해당 피연산자의 크기를 생성 합니다 char .Yields the size of its operand with respect to the size of type char. 구문Syntax sizeof unary-expression siz

docs.microsoft.com

참고 자료 2 : docs.microsoft.com/ko-kr/cpp/c-runtime-library/reference/msize?view=vs-2019

 

_msize

_msize_msize 이 문서의 내용 --> 힙에 할당된 메모리 블록의 크기를 반환합니다.Returns the size of a memory block allocated in the heap. 구문Syntax size_t _msize( void *memblock ); 매개 변수Parameters memblockmemblock 메모리

docs.microsoft.com

참고 자료 3 : man7.org/linux/man-pages/man3/malloc_usable_size.3.html

 

malloc_usable_size(3) - Linux manual page

malloc_usable_size(3) — Linux manual page MALLOC_USABLE_SIZE(3) Linux Programmer's Manual MALLOC_USABLE_SIZE(3) NAME         top malloc_usable_size - obtain size of block of memory allocated from heap SYNOPSIS         top #include size_t malloc_u

man7.org

 

'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