我正在阅读一些关于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 i
和int j
的内存地址之间的差异仅为4位(0100
)。
差异不是更大的东西,比如4个字节(0xffffffff
)?
请问我在哪里制造混乱?
答案 0 :(得分:6)
j位于BYTE地址0x6ffc84,0x6ffc85,0x6ffc86,0x6ffc87,因此,32位。
我位于BYTE地址0x6ffc88,0x6ffc89,0x6ffc8a,0x6ffc8b,所以,32位。
除了像8051这样的微控制器恐怖事件外,现代的非平凡处理器架构没有位可寻址内存。