programing

C++의 size_t와 int의 차이점은 무엇입니까?

goodsources 2022. 8. 9. 22:59
반응형

C++의 size_t와 int의 차이점은 무엇입니까?

몇 가지 C++ 예에서 이 유형의 사용을 볼 수 있습니다.size_t간단한 걸 썼을 텐데int차이점은 무엇이며, 그 이유는 무엇입니까?size_t더 좋을까?

친근한 Wikipedia에서:

stdlib.h 및 stdef.h 헤더 파일은 오브젝트의 크기를 나타내기 위해 사용되는 size_t라는 데이터 유형을 정의합니다.크기를 갖는 라이브러리 함수는 size_t 유형이어야 하며 연산자 크기는 size_t로 평가됩니다.

size_t의 실제 유형은 플랫폼에 의존합니다.일반적인 실수는 size_t가 부호 없는 int와 동일하다고 가정하는 것입니다.이는 특히 64비트아키텍처가 보급됨에 따라 프로그래밍 오류를 일으킬 수 있습니다.

또한 size_t가 중요한 이유 확인

size_t는 (이름에서 알 수 있듯이) 크기를 나타내기 위해 사용되는 유형입니다.플랫폼(및 구현 가능성까지 포함)에 의존하며, 이 목적으로만 사용해야 합니다.size_t는 size를 나타내는 부호가 없습니다.malloc, size of 및 다양한 문자열 연산 함수를 포함한 많은 stdlib 함수는 size_t를 데이터 유형으로 사용합니다.

int는 기본적으로 서명되어 있으며 크기는 플랫폼에 의존하지만 대부분의 최신 머신에서는 고정32비트가 됩니다(64비트 아키텍처에서는 size_t가 64비트이지만 이들 아키텍처에서는 int가 32비트 길이로 유지됩니다).

요약: 객체의 크기를 나타내려면 size_t를 사용하고, 그 외의 경우에는 int(또는 long)를 사용합니다.

size_ttype은 부호 없는 적분 타입으로 정의됩니다.sizeof교환입니다.현실에서, 당신은 종종 보게 될 것이다.int(하위 호환성을 위해) 32비트로 정의되지만size_t64비트 플랫폼에서는 64비트로 정의됩니다(4 GiB가 넘는 어레이 및 구조를 선언할 수 있습니다).만약 a가long int64비트이기도 합니다.이것은 LP64 표기법이라고 불립니다.long int32비트인데long long int포인터는 64비트, 즉 LLP64입니다.속도를 위해 64비트 명령을 사용하고 메모리를 절약하기 위해 32비트 포인터를 사용하는 프로그램인 반대의 경우도 있습니다.또한.int서명되어 있습니다.size_t서명되지 않았습니다.

이전에는 주소가 네이티브 크기보다 넓거나 짧은 플랫폼이 다수 있었습니다.int실제로 70년대와 80년대 초반에는 이러한 현상이 일반적이었습니다.인기 있는 8비트 마이크로컴퓨터는 모두 8비트 레지스터와 16비트 주소를 가지고 있었으며, 16비트와 32비트 사이의 이행으로 인해 레지스터보다 주소가 넓은 머신도 많이 생성되었습니다.MS-DOS용 Borland Turbo C에 대한 질문이 가끔 있습니다.MS-DOS용 Borland Turbo C의 거대한 메모리 모드에는 16비트 CPU(80386의 32비트 명령 세트 지원 가능)에 20비트 주소가 저장되어 있습니다.Motorola 68000은 32비트 레지스터와 주소를 가진 16비트 ALU 또는 24비트 메인프레임이 있습니다.주소임베디드 시스템에서는 ALU와 주소 버스 사이즈가 다릅니다.

언제라도요int보다 작다size_t매우 큰 파일 또는 오브젝트의 크기 또는 오프셋을 저장하려고 합니다.unsigned int오버플로우하여 버그를 일으킬 수 있습니다.를 사용하여int음수를 얻을 가능성도 있다.이 경우,int또는unsigned int더 넓어지면 프로그램이 올바르게 실행되지만 메모리가 낭비됩니다.

휴대성을 원하는 경우 일반적으로 용도에 맞는 유형을 사용해야 합니다.많은 사람들이 서명되지 않은 대신 서명된 수학을 사용할 것을 권장합니다(예:1U < -3이 목적을 위해 표준 라이브러리에서 정의됩니다.ptrdiff_t<stddef.h>다른 포인터에서 포인터를 뺀 결과의 부호 있는 유형으로 지정합니다.

즉, 회피책은 모든 주소 및 오프셋을 체크하는 것입니다.INT_MAX어느쪽이든0또는INT_MIN필요한 경우 서명된 수량과 서명되지 않은 수량을 비교하기 위한 컴파일러 경고를 켜십시오.어쨌든 항상 어레이 액세스에 C의 오버플로우가 없는지 항상 확인해야 합니다.

size_t는 int(아마도 구조체) 이외의 어떤 것이라도 될 수 있기 때문입니다.그 아이디어는 그것이 자신의 일을 기본 유형으로부터 분리한다는 것이다.

의 정의SIZE_T는 https://msdn.microsoft.com/en-us/library/cc441980.aspx 및 https://msdn.microsoft.com/en-us/library/cc230394.aspx 에서 구할 수 있습니다.

필요한 정보를 여기에 붙여넣기:

SIZE_T는 입니다.ULONG_PTR포인터가 가리킬 수 있는 최대 바이트 수를 나타냅니다.

이 유형은 다음과 같이 선언됩니다.

typedef ULONG_PTR SIZE_T;

A ULONG_PTR는 포인터 정밀도에 사용되는 부호 없는 긴 유형입니다.긴 유형에 포인터를 던져 포인터 계산을 수행할 때 사용합니다.

이 유형은 다음과 같이 선언됩니다.

typedef unsigned __int3264 ULONG_PTR;

언급URL : https://stackoverflow.com/questions/502856/whats-the-difference-between-size-t-and-int-in-c

반응형