问题:
访问堆栈的速度与访问内存的速度相同吗?
例如,我可以选择在堆栈中做一些工作,或者我可以直接使用内存中的标记位置进行工作。
所以,具体来说:push ax
速度是否与mov [bx], ax
? 同样pop ax
速度与mov ax, [bx]
? (假设 bx 在near
内存中保存一个位置。)
提问的动机:
在 C 中,不鼓励使用参数的琐碎函数是很常见的。
我一直认为这是因为不仅参数必须被压入堆栈然后在函数返回后从堆栈中弹出,而且因为函数调用本身必须保留 CPU 的上下文,这意味着更多的堆栈使用。
但是假设人们知道标题问题的答案,应该可以根据直接内存访问的等效数量来量化函数用于设置自身(推送/弹出/保留上下文等)的开销。因此,标题问题。
(编辑:澄清:
near
上面使用的与 16 位 x86 架构far
的分段内存模型相反。)