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

两种尺寸相同的不同类型的C有什么区别?,c,C,如果我分别在两台相同的64位机器上运行以下程序,然后逐字节比较它们的整个内存,我会看到什么区别 int main(int argc, char *argv[]) { unsigned int x=1; getc(stdin); return 0; } 如果两个x不是简单类型,如果它们是两个具有相同结构、相同内容和相同大小的不同名称结构,我会看到什么区别 int main(int argc, char *argv[]) { unsigned int x=1;

如果我分别在两台相同的64位机器上运行以下程序,然后逐字节比较它们的整个内存,我会看到什么区别

int main(int argc, char *argv[])
{
    unsigned int x=1;
    getc(stdin);
    return 0;
}


如果两个x不是简单类型,如果它们是两个具有相同结构、相同内容和相同大小的不同名称结构,我会看到什么区别

int main(int argc, char *argv[])
{
    unsigned int x=1;
    getc(stdin);
    return 0;
}

好的,让我澄清一下问题,现在节目改成了这个

unsigned int 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)注意,64位机器上的编译器仍然使用32位int是很常见的。但如果它们的大小相同,我怀疑您是否会看到差异。注意,msvc对于x64也长为32位。还请注意,因为没有使用
x
,该行可能会被优化,因此无论大小都不会有差异。请查看我的更新问题请查看我的更新问题,因为我没有询问数据类型的差异。我的答案仍然有效,更新并没有改变问题的核心。从理论上讲,编译器可以随心所欲地区分这些类型。在实践中,只要sizeof是相同的(在不同的编译器上会发生变化),您就不会看到差异。如果您想确定,请使用C99(stdint.h)中引入的数据类型。
unsigned long x=1;
printf("%d",sizeof x);
return 0;