본문 바로가기
TIL

[TIL] C++ 에서 INF 값 사용하기, 메모리 계산하기, 외

by vodkassi 2024. 3. 12.
728x90

C++ 에서는 최대값을 어떻게 사용하나?

- 다른 언어에서는 Number.MAX_SAFE_INTEGER (JS) 라던지 Double.POSITIVE_INFINITY (Java) 라던지 최대 정수를 상수로 사용할 때 쉽게 접근할 수 있었으나 C++ 에서는 이를 어떻게 할지 몰랐음

- 동기의 도움으로 <climits> 헤더를 쓰면 INT_MAX 값을 사용 가능하다는 것을 알게 됨

- 이외에도 INT_MIN, FLOAT_MAX, CHAR_MAX 등의 유용한 상수가 많은 것으로 보아 종종 사용하게 될 것 같음

 

2차원 배열의 메모리 크기 구하는 법

- N[50000][50000] 에 달하는 2차원 배열을 만들었다가 (당연하게도) 메모리 초과로 실패했던 문제를 맞닥뜨림

- 배열의 크기를 바이트 단위로 계산하는 법:

  1. 배열의 크기 (2차원인 경우, 행 수와 열 수) 에 각각 해당하는 숫자를 바이트로 변환
  2. 두 수를 곱함
  3. KB, MB 등의 단위로 보고 싶은 경우, 추가 계산 

- 1번 단계에선, 보통 타입을 기준으로 배열이 선언되기 때문에 해당 타입의 크기를 바이트 단위로 변환해서 사용해야 한다는 점에 유의해야 한다. (ex int -> 4 Bytes on 32-bit processor) int N[1500][1500] 배열이라면 1500 * 4 를 하면 된다. 

- 2번 단계의 결과가 곧 바이트로 표시된 크기이다. 앞선 N[1500][1500] 의 경우, 배열의 전체 크기는 (1500 * 4) * (1500 * 4) = 9000000 이다. 

- 3번 단계에서 기억할 것은 1 바이트는 8 비트(bit)이며, 1 킬로바이트(KB)는 1024 바이트, 1 메가바이트(MB)는 1024 KB이라는 것이다. 9000000 바이트를 MB로 변환하려면 9000000B ÷ 1024 ÷ 1024 을 계산하면 되고, 이는 곧 ≈ 8.7 MB 에 가깝다. 따라서, 9000000 바이트는 대략 8.73 MB이다. (계산기가 없는 상황이라면 어림잡아 1000 단위로 나눗셈 해도 가능) 

 

댓글