C中相同尺寸的两种不同类型有什么区别?

时间:2013-12-05 09:46:43

标签: c

如果我分别在两台相同的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,因此没有优化

现在我的问题是,如果你告诉我有一些不同,内存的差异在哪里?它们在某些内存中应该是不同的,因为它们的类型明显不同。但是哪里?我找不到了。

如果你告诉我内存没有区别。为什么没有区别。有些东西应该存储在内存的某个地方。否则,我认为计算机无法知道地址是变量以及变量是什么。

1 个答案:

答案 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个字节。