内存地址和数据类型简介

时间:2017-07-07 13:57:33

标签: c memory-address

我正在阅读一些关于C语言的记忆地址和数据类型的论文,我已经很好地掌握了内容但我偶然发现了一些数学,我似乎无法在任何地方弄清楚在互联网上。

假设我创建了两个局部变量

void foo(void){
    int i, j;
    printf("int i is stored in %p\n", &i);
    printf("int j is stored in %p\n", &j);
}

我得到的输出是

int i is stored in 0x6ffc88
int j is stored in 0x6ffc84

在我正在阅读的文本中,整数大小为4个字节(与我的计算机相同)。因此,int i应该被分配4个字节。但int iint j的内存地址之间的差异仅为4位(0100)。

差异不是更大的东西,比如4个字节(0xffffffff)?

请问我在哪里制造混乱?

1 个答案:

答案 0 :(得分:6)

j位于BYTE地址0x6ffc84,0x6ffc85,0x6ffc86,0x6ffc87,因此,32位。

我位于BYTE地址0x6ffc88,0x6ffc89,0x6ffc8a,0x6ffc8b,所以,32位。

除了像8051这样的微控制器恐怖事件外,现代的非平凡处理器架构没有位可寻址内存。