如果我分别在两个相同的64位计算机上运行以下程序,然后逐字节比较它们的整个内存,我会看到什么区别?
int main(int argc, char *argv[])
{
unsigned int x=1;
getc(stdin);
return 0;
}
int main(int argc, char *argv[])
{
unsigned long x=1;
getc(stdin);
return 0;
}
如果两个x不是简单类型,如果它们是两个具有相同结构,相同内容和相同大小的不同名称结构,我会看到什么区别?
好,让我澄清一下问题,现在程序更改为
unsigned int x=1;
printf("%d",sizeof x);
return 0;
unsigned long x=1;
printf("%d",sizeof x);
return 0;
我的编译器的两个输出是4,现在使用了x,因此没有优化
现在我的问题是,如果您告诉我有一些区别,那么内存的区别在哪里?它们在内存中的某处应该是不同的,因为类型明显不同。但是哪里?我找不到
如果您告诉我,记忆力没有差异。为什么没有区别。某些内容应存储在内存中的某个位置。否则,我认为计算机无法知道地址是变量以及变量是什么。
取决于编译器。大多数64位编译器使用32位int
和64位long
。
32位编译器通常是32位int
和32位long
。
16位编译器通常是16位int
,32位long
和16位short
。
除非特定的编译器文档如此说明,否则不能保证所有这些。Standard只说sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long)
,即char
1字节。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句