| 但是这种直接映射的方式也出现了另外一个问题,我们写一个简单的程序来说明(假设CPU内核对读写内存的策略一样,都要经过cache): Int demo_copy(int* dst, int* src, uint length) { int i = 0; for(i = length; i > 0; i --) { *dst = * src; dst ++; src ++; } } 而如果dst和src的差恰好是4k的整数倍(假设cache是4k大小),而这个拷贝的动作实际上是首先将src的数据load进来,然后再store进dst里面去,而他们的在cache中的index是一样的,就导致了cache行的频繁失效,极大降低了系统的效率。有些人可能认为这只是一种特例,但是随着系统越来越庞大,指令和数据发生这种巧合的可能性大大增加,于是必须在设计中考虑对这种情况的处理。 |
|