以下说明在最坏情况下需要多少次内存访问:
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?
答案 0 :(得分:2)
inc
执行3项操作:读取操作数,向其添加1,将操作数写回。如果操作数在内存中,则通常有1个读访问权和1个写访问权。
如果操作数跨越缓存行边界,则每次访问都会变为2次访问。
但是,当启用页面转换和虚拟内存并且此指令引用的内存位于磁盘上时,这可能会更糟。 TLB未命中,其他缓存未命中以及OS为执行指令而需要执行的所有页表和I / O活动可能会导致更多的内存访问。几乎不可能知道这种最坏情况需要多少。