您的位置:首页 > 新闻 > 资讯 > 宁波专业做网站的公司_电子商务网站建设的目的是开展网络营销_电商网络销售是做什么_百度一下你就知道官方

宁波专业做网站的公司_电子商务网站建设的目的是开展网络营销_电商网络销售是做什么_百度一下你就知道官方

2025/10/24 17:50:15 来源:https://blog.csdn.net/weixin_47220117/article/details/147530174  浏览:    关键词:宁波专业做网站的公司_电子商务网站建设的目的是开展网络营销_电商网络销售是做什么_百度一下你就知道官方
宁波专业做网站的公司_电子商务网站建设的目的是开展网络营销_电商网络销售是做什么_百度一下你就知道官方

定义结构体:

struct A{

int a;

float b;

double c;

char d;

short e;

}

struct A字段中占最多字节的是double,为8个字节

所以该结构体的默认对齐值为8(默认对齐值是取字段中最大的那个字节数)

A中第一个字段默认从0开始,

因此

a的位置为0 1 2 3

从b开始需要对开始地址进行计算

(float为4个字节,和默认对齐值相比取最小为4)

因此从下一个4的倍数,即4开始

b的位置为4 5 6 7

(double为8个字节,和默认对齐值相比取最小值为8)

下一个8的倍数为8

c的位置为8 9 10 11 12 13 14 15

(char为2个字节,和默认对齐值相比取值为2)

下一个1的倍数为16

d的位置为16 17

(short为2个字节,和默认对齐值相比取最小值为2)

下一个2的倍数为18

e的位置为18 19

再根据默认有效对齐值8计算占位符

下一个8的倍数为24

所以结构体A的存储大小为24个字节(因为从0-23开始)

下面是嵌套的

using System.Runtime.InteropServices;

struct InnerStruct

{

public byte a; // 1 byte

public int b; // 4 bytes

public double c; // 8 bytes

}

struct OuterStruct

{

public InnerStruct inner; // 嵌套结构体

public byte d; // 1 byte

}

class Program

{

static void Main()

{

Console.WriteLine("Size of InnerStruct: " + Marshal.SizeOf(typeof(InnerStruct)));//结果为16

Console.WriteLine("Size of OuterStruct: " + Marshal.SizeOf(typeof(OuterStruct)));//结果为24

}

}

InnerStruct的默认对齐值为8

byte为1个字节,

a的位置为0

int为4个字节,对比默认对齐值取最小值为4

下一个4的倍数为4

b的位置为4 5 6 7

double为8个字节,对比默认对齐值取最小值为8

下一个8的倍数为8

c的位置为8 9 10 11 12 13 14 15

最后进行内存补齐 即用默认对齐值8计算出下一个8的倍数为16

所以InnerStruct所占字节数为16(0~15)

OuterStruct中包含了InnerStructdui

可以将其拆开看,得出OuterStruct中占字节数最多的字段为double(8个字节)

所以OuterStruct的默认对齐值为8

inner的位置为0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

byte为1个字节,对比默认对齐值后取最小值为1

下一个1的倍数为16

d的位置为16

最后进行内存补齐 即用默认对齐值8计算出下一个8的倍数为24

所以OuterStruct占字节数为24(0~23)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com