x86 处理器可以调用多少个子例程?

use*_*142 0 c++ stack-overflow x86 gcc callstack

我正在编写一个小程序,用 printf("\219") 打印一个多边形,看看我正在做的事情是否适合我的内核。但它需要调用很多函数,我不知道x86处理器是否可以接受那么多子例程,而且我在google中找不到结果。所以我的问题是它是否会接受这么多函数调用以及最大值是多少。(我的意思是这样的:-)

function a() {b();}
function b() {c();}
function c() {d();}
...
Run Code Online (Sandbox Code Playgroud)

我已经使用了 5 个这样的级别(你知道我的意思,对吧?)

Dan*_*ein 6

您的函数深度不受处理器的限制,而是受堆栈大小的限制。在幕后,对 C++ 函数的调用通常会转换为callx86 中的指令,它将四个(或 x64 程序中的八个)字节推送到程序的堆栈上作为返回指针。有时调用会被优化并且根本不触及堆栈。函数还可能将额外的字节(例如本地函数状态)推送到堆栈上。


要获得可以调用的函数的确切数量,您需要反汇编代码以计算每个函数推送到堆栈的字节数(由于返回地址,最少四/八个,但可能更多),然后找到最大值堆栈大小并将其除以函数帧大小。