挚感数据包细化说明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
public struct MeasureResultV_t
    {
 
      public  UInt32 check_id;//数据包校验ID,固定0Xaabbccdd,其他值请丢弃该数据包
        public  UInt64 tick;// 数据包ID,自增
        public float sys_temp;//模块温度
 
        //MarshalAs属性指示如何在托管代码和非托管代码之间封送数据
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)]
        public float[] distance;
        public int distance_len;
 
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)]
        public float[] amp;
        public int amp_len;
 
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)]
        public double[] rem_angle;
        public int rem_angle_len;
 
        MeasureResultV_t(UInt32 a)//靠 ,结构体也有了构造函数的概念了
        {
            check_id = a;//数据包校验ID,固定0Xaabbccdd,其他值请丢弃该数据包
            tick = 0;//数据包ID,自增
            amp_len = 0;//回光强度长度
            sys_temp = 0;//模块温度
            distance_len = 0;//距离长度
            rem_angle_len = 0;//回光强度长度
            rem_angle = new double[256];//测量结果信息,V9版本主输出,振动信号由该数据检测
            distance = new float[256];//距离数组
            amp = new float[256];//设备接收光功率,回光强度数组
        }
 
    }

  ***

数据包大小:该结构体实例在 64 位系统中占用 4136 字节。

字段内存占用与对齐规则

  1. 基本类型大小(参考资料31217

    • UInt32:4 字节
    • UInt64:8 字节
    • float:4 字节
    • int:4 字节
    • double:8 字节
  2. 定长数组内存占用(参考资料18914

    • [MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)] 表示内联定长数组,占用连续内存:
      • float:256 × 4 = 1024 字节
      • double:256 × 8 = 2048 字节
  3. 内存对齐规则(参考资料156913

    • 结构体总大小需是 最大成员类型大小的整数倍(此处最大为 double 的 8 字节)。
    • 成员起始偏移需是 自身大小的整数倍(如 UInt64 需 8 字节对齐)。

******************

总内存占用

    • 字段总和:
      4 (check_id) + 8 (tick) + 4 (sys_temp) + 1024 (distance) + 4 (distance_len) + 1024 (amp) + 4 (amp_len) + 2048 (rem_angle) + 4 (rem_angle_len) = 4120 字节

    • 对齐填充:

      • check_id → tick 填充 4 字节
      • amp_len → rem_angle 填充 4 字节
      • 末尾填充 4 字节(总大小需 8 对齐)
        总计填充:4 + 4 + 4 = 12 字节
    • 最终大小:
      4120 + 12 = 4136 字节

posted @   wenluderen  阅读(3)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示