Objective C语言

时间:2015-08-30 15:49:11

标签: objective-c

我知道如果计算机是64位,则int变量占用4个字节。我尝试通过以下代码对此进行测试。

int c = 16;
int f = 11;
NSLog(@"&c = %p &f = %p", &c,&f);

,输出为:

&c = 0x7fff570c8a4c &f = 0x7fff570c8a48

差异是4,这是否意味着变量占用4个字节? int和int变量的指针存储在计算机,堆栈或堆中的哪里?指针和变量存储在不同的地方吗?

我想理解为什么2的地址差异为4。

2 个答案:

答案 0 :(得分:4)

  

我知道如果计算机是64位,那么int变量占用64/8 = 8字节。

一般情况下并非如此。例如,64位Windows系统使用32位int s。

无论如何,堆栈上变量的位置有些随意,并且不能依赖于确定这些变量的任何内容。尺寸。 (在这种情况下 确实这些变量占用了四个字节,但在所有情况下都不一样。)如果你需要确定" bit-ness"对于程序中的系统,考虑采用指针的大小,例如

sizeof(void *)

对于使用32位地址的系统,这将始终返回4,对于使用64位地址的系统,这将始终返回。

答案 1 :(得分:-4)

是的,它确实意味着变量占用4个字节。您询问的指针存储在堆栈中,用于调用NSLog()。