• C#:[StructLayout(LayoutKind.Sequential)]


    参考网址: https://blog.csdn.net/hongkonglife/article/details/23422857

    结构体是由若干成员组成的.布局有两种
    1.Sequential,顺序布局,比如
    struct S1
    {
    int a;
    int b;
    }
    那么默认情况下在内存里是先排a,再排b
    也就是如果能取到a的地址,和b的地址,则相差一个int类型的长度,4字节
    [StructLayout(LayoutKind.Sequential)]
    struct S1
    {
      int a;
      int b;
    }
    这样和上一个是一样的.因为默认的内存排列就是Sequential,也就是按成员的先后顺序排列.
    2.Explicit,精确布局
    需要用FieldOffset()设置每个成员的位置
    这样就可以实现类似c的公用体的功能
    [StructLayout(LayoutKind.Explicit)]
    struct S1
    {
      [FieldOffset(0)]
      int a;
      [FieldOffset(0)]
      int b;
    }
    这样a和b在内存中地址相同
    设置这个属性表明这个结构是顺序存放的,这个顺序是指内存顺序,如果你要调用C或者C++的DLL的话,不设置这个顺序可能引起内存访问违背的问题,也可能不会有,完全取决于编译器是否优化了结构体的内存存放,因此很多人显示申明,是为了防止很多不可预知的以外
    ————————————————
    版权声明:本文为CSDN博主「hongkonglife」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/hongkonglife/article/details/23422857

  • 相关阅读:
    IIS代理
    NODEJS
    js图表插件
    注册nodejs程序为windows服务
    中断子系统7_中断出口处理
    Leetcode: Sort List
    jquery 鼠标经过放大图片
    在Tomcat上运行ADF Essentials应用
    简谈HTML5与APP技术应用
    Boost的Serialization和SmartPoint搭配使用
  • 原文地址:https://www.cnblogs.com/bruce1992/p/14958503.html
Copyright © 2020-2023  润新知