-
배열의 최대 길이에 관하여프로그래밍/c++ 2015. 3. 31. 13:05반응형
왜 하필 배열의 길이가 0x7fffffff 바이트를 초과할 수 없다고 했을까 더군다나 heap 메모리에 생성되는 것인데..?
현대의 운영체제는 메모리가 부족하면 하드디스크를 램으로도 사용한다고 들었다.
사실 배열의 최대 크기는 사실 ptrdiff_t과 관계가 있다.
31라인의 0x7fffffff은 현재 내 시스템에서의 ptrdiff_t에 오버플로우가 없이 저장이 가능한 최대의 값이다.
ptrdiff_t은 포인터간의 거리를 저장하는데 쓰이는 타입으로, 부호 있는 정수형의 최대 값으로 재정의 되어있다.
#ifdef _32비트_시스템_
typedef ptrdiff_t long;
#elif _64비트_시스템_
typedef ptrdiff_t long long;
.. 이런 식으로
여기서 그냥 int라고 하지 않는 것이 의아할 수도 있겠으나, 사실 int는 64비트 시스템에선 8바이트, 32비트 시스템에선 4바이트인 그런 정수형이 아니기 때문이다.
예를 들자면, 윈도우에서의 int형은 64비트 시스템을 사용중이라도 4바이트다.
반응형'프로그래밍 > c++' 카테고리의 다른 글
c++ 코드 조각 가변 인자 템플릿을 이용한 벡터의 초기화 (0) 2015.04.15 unsinged int와 size_t (0) 2015.03.31 우측값 참조로 받은 값은 우측값일까? (0) 2015.03.25 [c++14] shared_mutex와 shared_lock의 사용 (0) 2015.03.24 std::decay<T>의 사용 (0) 2015.03.04