当前位置:  开发笔记 > 编程语言 > 正文

C中的递归协同程序(C99)

如何解决《C中的递归协同程序(C99)》经验,为你挑选了0个好方法。

在实现通信协议时,我们有一个编码器,它以递归方式遍历某些结构并将它们编码为二进制消息.

到目前为止一直很好,但现在缓冲区必须分成多个固定大小的块,例如接收缓冲区的大小.因为为完整消息分配内存并因此削减它似乎太浪费了(消息的大小 - 理论上 - 没有限制),现在的想法是用setjmp/longjmp实现协同程序.

目前,我有一个带有两个跳转缓冲区的原型 - 一个用于恢复编码功能的缓冲区,另一个用于模拟函数的返回行为以跳回其调用者.

好吧,它似乎工作,但代码看起来像直接来自地狱.是否存在用于实现可中断递归函数的"约定",可能是一组宏或什么?我想只使用标准化的功能,没有内联asm以便保持便携.

增加: 原型在这里:https://github.com/open62541/open62541/compare/master...chunking_longjmp '用法'显示在单元测试中.目前,针对非递归函数实现了协程行为Array_encodeBinary.但是,'coroutine'行为应该扩展到UA_encodeBinary这里的一般递归函数:https://github.com/open62541/open62541/blob/master/src/ua_types_encoding_binary.c#L1029

推荐阅读
拾味湖
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有