【发布时间】:2014-10-04 15:39:52
【问题描述】:
有人可以向我解释一下下面发生了什么吗? 问题:
- 为什么变量 i 不留在寄存器中?
- 为什么寄存器 rbp 包含内存缓存行的地址而不是 i 的地址(即 4 个字节)?
- 这是什么意思?
movl $0x5,-0x4(%rbp);%和negative 0x4是什么意思?
int main(int argc, char* argv[])
{
int i = 5; // line 25
i ++; // line 26
}
-----------------------------------------------------
Disassembly:
25 int i = 5;
00000000004014f4: movl $0x5,-0x4(%rbp)
26 i ++;
00000000004014fb: addl $0x1,-0x4(%rbp)
-----------------------------------------------------
Register Values:
rbp: 0x23fe60
-----------------------------------------------------
Memory map at line 25:
Address | 0-3 | 4-7 | 8-B | C-F |
0x23fe60 |00000000|00000000|00000000|05000000|
Memory map at line 26:
Address | 0-3 | 4-7 | 8-B | C-F |
0x23fe60 |00000000|00000000|00000000|06000000|
注意:以上是 Eclipse 生成的,我是在 64 位机器上使用 mingw 编译的。
【问题讨论】:
-
现金是什么意思?缓存?
-
缓存不能单独寻址。所以我不确定你关于缓存的问题是什么意思。
-
我的意思是,我给 i 分配了 5。 5不应该在缓存中而不是映射到内存吗?
-
我认为您需要了解缓存的工作原理:en.wikipedia.org/wiki/CPU_cache
-
啊对不起yyyy我会更新我的问题,我的意思是注册!!!