gpt4 book ai didi

c - C 中的递归协程 (C99)

转载 作者:太空狗 更新时间:2023-10-29 15:07:55 25 4
gpt4 key购买 nike

<分区>

在实现通信协议(protocol)时,我们有一个编码器,它递归地遍历一些结构并将它们编码成二进制消息。

到目前为止一切顺利,但现在缓冲区必须分成多个固定大小的 block ,例如接收缓冲区的上限。由于为完整消息分配内存并随后对其进行切割似乎太浪费了(消息的大小 --理论上-- 没有限制),现在的想法是实现一个协同程序setjmp/longjmp 的。

目前,我有一个带有两个跳转缓冲区的原型(prototype) - 一个缓冲区用于恢复编码函数,第二个用于模拟函数的返回行为以跳回其调用者。

好吧,它似乎可以工作,但代码看起来像是直接来自 hell 。是否有用于实现可中断递归函数的任何“约定”,也许是一组宏或其他东西?我想只使用标准化功能,不使用内联 asm 以保持可移植性。

添加:原型(prototype)在这里:https://github.com/open62541/open62541/compare/master...chunking_longjmp“用法”显示在单元测试内部。目前,协程行为是为非递归函数 Array_encodeBinary 实现的。但是,“协程”行为应扩展到位于此处的一般递归 UA_encodeBinary 函数:https://github.com/open62541/open62541/blob/master/src/ua_types_encoding_binary.c#L1029

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com