0

以下指令在最坏情况下需要多少内存访问:

add edx, (to_printf-next_i) ; where to_printf and next_i are labels defined in .text
inc dword [myarray + ebx*4] ; where myarray is a label defined in .data 

我的回答是真的吗?

  1. 0 , since we do not access memory here
  2. fetch: 4 bytes for the address : myarray + ebx*4 -> 2 memory accesses in the worst case
     write: 4 bytes because of "dword" -> 2 memory accesses in the worst case
     read? 
4

1 回答 1

2

inc做 3 件事:读取操作数,加 1,写回操作数。如果操作数在内存中,通常有 1 个读访问和 1 个写访问。

如果操作数越过缓存线边界,则每次访问都会变成 2 次访问。

但是当启用页面转换和虚拟内存并且该指令引用的内存在磁盘上时,情况可能会更糟。TLB 未命中、其他缓存未命中以及操作系统为让指令执行而需要执行的所有页表和 I/O 活动可能会导致更多的内存访问。对于这种最坏的情况,几乎不可能说出需要多少个。

于 2012-06-25T08:34:06.387 回答