程序集中的内存访问

时间:2012-06-25 07:44:11

标签: assembly x86

以下说明在最坏情况下需要多少次内存访问:

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? 

1 个答案:

答案 0 :(得分:2)

inc执行3项操作:读取操作数,向其添加1,将操作数写回。如果操作数在内存中,则通常有1个读访问权和1个写访问权。

如果操作数跨越缓存行边界,则每次访问都会变为2次访问。

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