同一指针在不同的编译器中显示不同的大小

时间:2012-05-31 14:26:24

标签: c pointers sizeof

我在Turbo C编译器上运行了以下代码 GNU编译器:

int main()
{
   char *cptr;
   printf("%d\n",sizeof(cptr));
   return 0;
}

我在Turbo C上输出' 2 '并在GNU编译器运行时输出' 4 '。 我在64位机器上。 任何人都可以向我解释这些差异背后的事实吗?

6 个答案:

答案 0 :(得分:3)

Turbo C,这是老式的,可能是为16位DOS机器构建的,默认情况下它有小指针。

答案 1 :(得分:2)

如果我们考虑基于DOS的Turbo-C编译器,地址被限制在0x0000到0xFFFF(0-65535)的范围内,因此指针的大小是2个字节。另一方面,如果我们考虑32位GNU编译器,那里会创建数百万个地址,因此大小为4个字节。

指针的大小仅取决于您使用的C编译器,但不取决于操作系统。

答案 2 :(得分:1)

Turbo C是16位,因此sizeof(cptr)获得2。

答案 3 :(得分:1)

仅仅因为您的计算机本身是64位并不意味着您可能在其上运行的每一部分软件都会利用它。 64位计算机(和支持软件)旨在向上兼容32位。为32位机器编写的软件能够运行。

答案 4 :(得分:0)

基本上,sizeof指针是指针使用的整数类型的大小。准确地说,32位平台上的32位int,64位平台上的64位int(long long)。 但要小心,它还取决于您使用的编译器。这意味着,即使在64位平台上,如果使用的是32位编译器(甚至是16位),仍然会将32位int用于指针类型。 从你的结果看,你看起来turbo C编译器绝对不是64位(应该是16位,如果我不记得它错了)。虽然你的gcc编译器是真正的64位。

答案 5 :(得分:0)

对于任何给定的指针类型,不同的平台可能具有不同的大小。这一切都取决于底层内存架构和任何给定进程可用的地址空间。永远不要假设指针类型总是具有特定的大小。

相关问题