问题标签 [packed]

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 投票
2 回答
95 浏览

c - 为什么这个结构不打包?

也许我对“打包”属性的性质有误解,但我的理解是下面的结构应该打包到 16 个字节,而不是通常填充的 24 个字节。我可以验证是否正在应用打包属性(通常),因为我在同一个头文件中定义了另一个结构,该结构从 16 字节压缩到 10 字节。编译器是否有任何理由忽略该属性而不通过警告指示?

为了澄清,当我说它似乎没有打包时,我是基于 sizeof(foo) 的输出,它返回 24 而不是预期的 16。有问题的代码在一个简单/粗略的自定义内核中目前工具非常有限,所以我一直依靠通过打印到屏幕进行基本调试。

我正在使用 GCC 10.3.0(在 ubuntu 上)。

0 投票
1 回答
49 浏览

c# - C#:循环遍历嵌套结构的成员对象

大家好,你们所有的 c# 向导!

我需要将(打包的)嵌套结构的所有内存偏移值存储在这些各自的结构中。 到目前为止,循环遍历所有成员都可以正常工作。另外,我得到了适当的内存偏移值。这个结构装置可能包含几十个结构,最后还有几百个其他成员。但是我在初始化时做这一切,所以 CPU 性能在这里不会成为问题。


但:

在这个迭代过程中,我似乎无法访问这些结构的实际实例。事实证明,当我尝试存储这些偏移值时,它们最终不会出现在我需要它们的位置(当然,我在实例“SomeStruct1”及其包含其他结构实例中需要它们,但调试器清楚地显示了我初始值 (-1))。

我怀疑“field_info.GetValue”或“obj_type.InvokeMember”不是获取对象引用的正确方法?有没有其他方法可以遍历嵌套的结构实例

请帮忙!我已经拼命调试和谷歌搜索了三天,但我现在没有想法......

感谢您的努力!

-阿尔伯特


PS - 我做这些不寻常的事情的原因:我通过提到的嵌套结构在两个嵌入式 CPU 内核之间进行通信(两者都是混合的 c/c++ 项目)。这就像一个魅力,因为两个核心共享相同的内存,结构所在的位置。

此外,我必须在 ac# 主机应用程序和这些嵌入式内核之间进行通信,所以我认为如果我实现这个结构的第三个实例,这可能是一件好事。只有这一次,我显然不能使用共享 RAM。相反,我为数据保存成员实现值设置器和获取器,找出内存偏移量以及数据保存成员的长度,并通过 USB 或以太网将此信息(连同值本身)提供给嵌入式系统 - 所以我的嵌入式系统的“API”将只是一个结构。每次更改结构时,我必须做的唯一维护:我必须将持有的 .h 文件(嵌入式项目)复制到 .cs 文件(宿主项目)。我知道这很疯狂 - 但它现在有效。

感谢您的关注。-阿尔伯特


这是一个应该编译和执行的简化(错误,见下文)示例(WinForms,c#7.3):

0 投票
2 回答
50 浏览

c++ - 如何正确访问打包的结构成员

访问打包结构成员的正确方法是什么?

我的 IDE 为 foo 提供了警告/建议,我可能正在访问未对齐的 int 指针,这确实是这种情况。我的问题是

  • 在 foo 和 bar 之间,一种方法比另一种更好吗?
  • 访问未对齐的指针数据是否不正确,但可以使用它来初始化正确对齐的类型?(如酒吧)。
  • 我们是否应该将打包的 struct 单个成员复制到正确对齐的数据结构中,然后使用它?这意味着几乎每个打包数据结构都有一个非打包数据结构,而打包结构仍然局限于序列化层。