IT이야기

size_t의 최대값을 찾기 위한 휴대용 방법은 무엇인가?

cyworld 2022. 5. 19. 22:40
반응형

size_t의 최대값을 찾기 위한 휴대용 방법은 무엇인가?

내 프로그램이 실행 중인 시스템에서 size_t의 최대값을 알고 싶다.나의 첫 번째 본능은 다음과 같이 부정적인 1을 사용하는 것이었다.

size_t max_size = (size_t)-1;

하지만 더 좋은 방법이나 어딘가에 계속 정의되어 있는 방법이 있을 거야.

매니페스트 상수(매크로)는 C99에 존재하며 이를 부른다.SIZE_MAXC89/90에는 그런 상수가 없다.

그러나 원래 포스트에 가지고 있는 것은 최대의 가치를 찾아낼 수 있는 완벽하게 휴대할 수 있는 방법이다.size_t그것은 서명되지 않은 어떤 타입으로도 작동할 수 있다.

#define MAZ_SZ (~(size_t)0)

또는SIZE_MAX

다른 답변에서 제시된 비트 조작의 대안으로 C++에서 이 작업을 수행할 수 있다.

#include <limits>
size_t maxvalue = std::numeric_limits<size_t>::max()

size_t max_size = (size_t)-1;OP에 의해 제안된 해결책은 확실히 지금까지는 최고였지만, 나는 이것을 하기 위한 또 다른 복잡한 방법을 알아냈다.단지 학문적인 호기심 때문에 올리는 겁니다.

#include <limits.h>

size_t max_size = ((((size_t)1 << (CHAR_BIT * sizeof(size_t) - 1)) - 1) << 1) + 1;

적어도 C++11 컴파일러를 가정할 경우 SIZE_MAX를 사용할 수 있어야 한다.

http://en.cppreference.com/w/c/types/limits

참조URL: https://stackoverflow.com/questions/3472311/what-is-a-portable-method-to-find-the-maximum-value-of-size-t

반응형