如果我分别在两台相同的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,因此没有优化
现在我的问题是,如果你告诉我有一些不同,内存的差异在哪里?它们在某些内存中应该是不同的,因为它们的类型明显不同。但是哪里?我找不到了。
如果你告诉我内存没有区别。为什么没有区别。有些东西应该存储在内存的某个地方。否则,我认为计算机无法知道地址是变量以及变量是什么。
答案 0 :(得分:2)
取决于编译器。大多数64位编译器使用32位int
和64位long
。
32位编译器通常为32位int
和32位long
。
16位编译器通常为16位int
,32位long
和16位short
。
除非特定编译器的文档说明,否则这些都不能得到保证。标准只说sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long)
,而char
是1个字节。