c - 解包函数 12 次深度调用

标签 c function

所以 block 是由函数包装的代码。函数 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 .

另请参阅 Ian Taylor 的 libbacktrace在海湾合作委员会内部。

如果使用带有 GNU glibc 的系统(例如许多 Linux 系统),您可以考虑使用 backtrace功能。

我不建议这样做。它很容易出错,非常特定于 Linux/Glibc/GCC,而且不利于优化。

由于您使用的是 free software图书馆,你应该更好地自己改进它以满足你的需求。您最好还发布您的更改并尝试将它们推送到上游。

关于c - 解包函数 12 次深度调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31162113/

相关文章:

将字符串与特定模式进行比较

c - 内核中是否有与 perror 等效的东西?

javascript函数无需参数即可工作,

javascript - JS 中的函数定义方式

c++ - 在执行代码之前进入函数时引发异常

javascript - js调用函数但是不起作用

c++ - 在多个可执行文件之间共享相同的 sql 连接

c - 如何正确使用STDERR_FILENO?

c - 如何在 ARM 上使用 kgdb?

javascript - 如何在 setState() 方法中构建方法