问题标签 [memory-mapped-io]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
75 浏览

c++ - 是否有将动态长度的字节缓冲区解析为结构的优雅方法?

背景

正如这里所描绘的https://godbolt.org/z/xaf95qWee(与下面的代码大部分相同),我正在使用一个以内存映射文件的形式提供共享内存资源的库。

对于静态大小的消息,read 方法可以非常优雅地返回一个结构(与缓冲区的布局匹配),并且客户端有一个很好的类型化接口,而不必担心内部结构。

问题/问题

然而,一些数据负载构成动态数组,编码为缓冲区包含数组 S 的大小(即条目数),后跟 S 一些已知类型的条目(通常是整数)。因此,示例可能如下所示: [type|type|error|error|size(eg4)|elem|elem|elem|elem|undef|...]

我想知道,在这种动态结构中是否有类似优雅的阅读方式,只有在收到 msg 时才知道大小。

我考虑过 的一个想法是使用 std::vector 成员定义动态数据。这种方法的“问题”是向量的数据在堆上,而不是栈上。因此“直接”初始化将不起作用。当然,我可以在没有向量的情况下定义结构,直到 size 成员。然后在第二步中读取大小并专门从缓冲区中读取许多整数,从偏移量开始。但我正在寻找一种没有第二步的方法。

Another idea: Because the buffer has a maximum size, I could create a c-array member that is as large as possible. This will be able to be directly initialized, but most of the array will be empty which does not sound efficient (I know not to optimize prematurely but this is mostly a theoretical question at this point and not for a production system).