Caching 局部性原则与呼叫指令
在讨论地方性原则时,我的教科书作了以下陈述: 除了分支和调用指令,它们只构成一个小的 在所有程序指令中,程序执行是顺序的。 因此,在大多数情况下,必须立即获取指令 遵循最后获取的指令 作为一个新手,我觉得这很难相信。我遇到的所有代码都充满了调用指令。事实上,在我看来,调用指令实际上执行程序中最重要的操作Caching 局部性原则与呼叫指令,caching,memory,computer-science,ram,localityofreference,Caching,Memory,Computer Science,Ram,Localityofreference,在讨论地方性原则时,我的教科书作了以下陈述: 除了分支和调用指令,它们只构成一个小的 在所有程序指令中,程序执行是顺序的。 因此,在大多数情况下,必须立即获取指令 遵循最后获取的指令 作为一个新手,我觉得这很难相信。我遇到的所有代码都充满了调用指令。事实上,在我看来,调用指令实际上执行程序中最重要的操作 如果有人能详细解释一下为什么这个概念是正确的,尽管调用指令在程序中扮演着重要角色,我将不胜感激。我在我的计算机上随机选择了一个二进制文件,即货物包管理器。然后我: 用otool-tvV-car
如果有人能详细解释一下为什么这个概念是正确的,尽管调用指令在程序中扮演着重要角色,我将不胜感激。我在我的计算机上随机选择了一个二进制文件,即
货物
包管理器。然后我:
- 用
otool-tvV-cargo>组件将其拆解
- 只得到指令:
cat汇编| awk'{print$2}'>指令
- 对每条指令进行计数:
排序指令| uniq-c | sort-n>计数
callq
,jmp
,je
,jne
),但也有很多内存操作。内存操作相对较慢,并且占用了大量程序的运行时间movq
只是一个内存操作,它占程序的三分之一以上
CPU缓存用于将最近引用的内存数据保持在靠近CPU核心的位置,从而加快将来对相同数据的内存操作。它们之所以能够做到这一点,是因为在同一内存上的操作通常在时间上接近(时间局部性)。因此,可以缓存内存数据,因为您可能很快会再次需要它。我在我的计算机上随机选择了一个二进制文件,即
cargo
软件包管理器。然后我:
- 用
otool-tvV-cargo>组件将其拆解
- 只得到指令:
cat汇编| awk'{print$2}'>指令
- 对每条指令进行计数:
排序指令| uniq-c | sort-n>计数
callq
,jmp
,je
,jne
),但也有很多内存操作。内存操作相对较慢,并且占用了大量程序的运行时间movq
只是一个内存操作,它占程序的三分之一以上
CPU缓存用于将最近引用的内存数据保持在靠近CPU核心的位置,从而加快将来对相同数据的内存操作。它们之所以能够做到这一点,是因为在同一内存上的操作通常在时间上接近(时间局部性)。因此,可以缓存内存数据,因为您可能很快会再次需要它。“小部分”是一个相对术语。我敢打赌,对于每4到5条非分支指令,通常会有1条分支指令。当我看到他们在大学里教的所有学士学位时,我很高兴我在一家电脑公司工作时学到了这一点。“小分数”是一个相对的术语。我敢打赌,对于每4到5条非分支指令,通常会有1条分支指令。当我看到他们在大学里教的所有学士学位时,我很高兴我在一家电脑公司工作时学到了这一点。
| 34.83% | movq |
| 7.30% | leaq |
| 7.00% | callq |
| 6.90% | je |
| 5.61% | movl |
| 4.86% | cmpq |
| 3.77% | testq |
| 3.11% | jmp |
| 2.23% | jne |
| 2.17% | popq |
| 2.05% | pushq |
| 1.69% | addq |
| 1.29% | cmpl |
| 1.20% | movabsq |
| 1.18% | movb |
| 1.05% | xorl |