因此,代码块是由函数包装的。函数A调用函数B。解包函数B是将来自函数B的代码放入函数A中。
我的问题是:我有A通话B通话C通话... 12次。因此,我有一个调用图12个函数深层(来自解码图像的开源库),并且我想通过展开12个函数到达实际解码图像的循环来使解码可进行流式处理。通过这样做,我可以告诉解码器不要立即对整个图像进行解码,但是只要我告诉它,它就会执行一些小步骤。
如果有人知道或曾经遇到过这样的问题,请让我知道任何好的设计模式。
PS:语言是C。
最佳答案
在标准C中,这可能是不可能的,因为您想检查call stack(并且标准不知道它,并且某些实现可能没有)。您需要阅读有关continuations的信息。
请注意,优化编译器可以内联某些函数调用(特别是通过gcc -flto -O2
编译和链接进行链接时优化),因此您的问题没有任何意义。
如果使用GCC作为C编译器(并且如果您不禁用帧指针并且不要求编译器进行过多优化),则可以考虑使用GCC return address builtins。
另请参阅GCC中Ian Taylor的libbacktrace。
如果使用带有GNU glibc的系统(例如许多Linux系统),则可以考虑使用backtrace函数。
我不建议这样做。它容易出错,非常特定于Linux / Glibc / GCC,并且不利于优化。
由于使用的是free software库,因此您应该根据自己的需要更好地对其进行改进。您最好也发布您的更改,并尝试将其推向上游。
关于c - 展开一个函数12次调用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31162113/