擅长:python、mysql、java
<p>让-弗朗索瓦·法布对环路的观察非常好,但我们可以更进一步。代码正在执行大约8000个写操作,大小不变,内容几乎相同。我们可以在一次操作中准备一个缓冲区。你知道吗</p>
<pre><code># Prepare buffer with static portions
addresses = list(range(1,4096)) + list(range(8193,12288))
dataoffset = 2+5+1+2
linelength = dataoffset+8+1
buf = bytearray(b"".join(b'0x%05x\t0x%08x\n'%(j,0)
for j in addresses))
# Later on, fill in data
for line,address in enumerate(addresses):
offset = linelength*line+dataoffset
buf[offset:offset+8] = b"%08x"%memory[address]
f.write(buf)
</code></pre>
<p>这意味着系统调用要少得多。很可能我们可以更进一步,例如,将内存作为缓冲区读取,并使用<code>b2a_hex</code>或类似的格式,而不是每个单词的字符串格式。也可以预先计算偏移量,而不是使用枚举。你知道吗</p>