Size of int and sizeof int pointer on a 64 bit machine
I was just wondering how can I know if my laptop is 64 or 32 bit machine. (it is a 64).
So, I thought about printing the following:
int main()
{
printf("%d",sizeof(int));
}
and the result was 4, which seemed weird (since it is a 64 bit machine)
But, when I printed this:
int main()
{
printf("%d",sizeof(int*));
}
the result was 8, which made more sense.
The question is:
Since I'm using a 64 bit machine, shouldn't a primitive type such as int should use 8 bytes
(64 bit) and by that sizeof int should be 8? Why isn't it so?
And why is the int* size is 8?
A bit confused here,
so thanks in advance.
그가 아니다.sizeof(int)
는 구현이 정의되어 있으며, 일반적으로 4바이트입니다.
반면에 4GB 이상의 메모리(32비트 시스템에서 가능)를 처리하려면 포인터의 너비가 8바이트가 되어야 합니다.int*
"메모리의 어딘가"에 주소를 저장할 뿐이며 32비트로는 4GB 이상의 메모리를 저장할 수 없습니다.
Size of a pointer should be 8 byte on any 64-bit C/C++ compiler, but the same is not true for the size of int.
Wikipedia has a good explanation on that:
In many programming environments for C and C-derived languages on 64-bit machines, "int" variables are still 32 bits wide, but long integers and pointers are 64 bits wide. These are described as having an LP64 data model. Another alternative is the ILP64 data model in which all three data types are 64 bits wide, and even SILP64 where "short" integers are also 64 bits wide.[citation needed] However, in most cases the modifications required are relatively minor and straightforward, and many well-written programs can simply be recompiled for the new environment without changes. Another alternative is the LLP64 model, which maintains compatibility with 32-bit code by leaving both int and long as 32-bit. "LL" refers to the "long long integer" type, which is at least 64 bits on all platforms, including 32-bit environments.
그sizeof(int)
,sizeof(int*)
, 그리고 "기계 크기"는 종종 서로 상관되지만, 각각 독립적으로 더 작을 수도 있고, 다른 것들보다 더 클 수도 있습니다.유일한 C 요구 사항은 그것들이 적어도 16비트(또는 그 정도)여야 한다는 것입니다 - 그것을 제외하고, 그것은 그것에 의존적입니다.sizeof(int)
,sizeof(int*)
.
(그러나 포인터는 적어도 int 크기여야 합니다.흠)
프로그래머들은 1, 2, 4, 8바이트 혹은 8, 16, 32, 64비트의 정수형을 원합니다.int보다 작을 수 있는 정수형은 char와 short 두 가지뿐입니다.int가 64비트라면 8, 16, 32비트 크기의 세 가지를 모두 가질 수 없습니다.그렇기 때문에 컴파일러는 int = 32비트로 만드는 경향이 있으므로 char = 8비트, short = 16비트, int = 32비트, long = 64비트 및 long = 32비트 또는 64비트를 가질 수 있습니다.
size_t 때문에 다음과 같이 정의되었습니다.
typedef unsigned int size_t;
%d 대신 %zu, %u 또는 %lu로 표시해야 합니다.
printf("%zu\n", sizet);
printf("%u\n", sizet);
printf("%lu\n", sizet);
언급URL : https://stackoverflow.com/questions/20721294/size-of-int-and-sizeof-int-pointer-on-a-64-bit-machine
'programing' 카테고리의 다른 글
"unix"의 키워드가 C에서 제한되어 있습니까? (0) | 2023.10.10 |
---|---|
파이썬 3.x용 내 SQL-dblib? (0) | 2023.10.10 |
IIS7: HTTP->HTTPS 클린 (0) | 2023.10.10 |
AJAX MVC 4를 사용하여 드롭다운 목록 채우기 (0) | 2023.10.10 |
$ digest 사이클을 부를 때? (0) | 2023.10.10 |