-
Packed 表示字节对齐。
例如,int float double char 的总大小为 4 + 4 + 8 + 1 = 17
但是如果你不使用 packed,系统会以默认的方式对齐 zhidao(假设 4 个字节),那么它将占 4 + 4 + 8 + 4 = 20;(少于 4 个字节将填充 4 个字节)。
每个硬件平台处理存储空间的方式都非常不同。 某些平台只能从某些地址访问某些类型的数据。 例如,如果某些架构的 CPU 在访问未对齐的变量时出错,则编程必须确保该架构中的字节对齐。
其他平台可能并非如此,但最常见的是数据存储不符合适合它们的平台要求,导致访问效率下降。
-
你不必考虑它,你无法弄清楚。
Packed 表示字节对齐。
例如,int float double char 的总大小为 4 + 4 + 8 + 1 = 17
但是如果你不使用 packed,系统将默认对齐(假设 4 个字节),因此它将占 4 + 4 + 8 + 4 = 20;(少于 4 个字节将填充 4 个字节)。
但是在VS2008中不能使用上述方法(我还没有尝试过早期版本),如果要设置对齐方式,只需选择项目属性-配置属性-C C++-**生成即可设置,其选项是。 在 gcc 下, 你可以添加 pragma pack(4) 来表示 4 字节对齐的意思, 其他的也是如此。
-
对于内存对齐,有些地方会根据一定长度来处理内存,如果你的结构恰好是最小单位的整数倍,你可以使用这个函数来声明自动对齐,不足也是一个占位符。
-
如果编译不通过,这首先要看你的编译器是否支持,如果支持,不同编译器的格式也有些不同,你要看编译器的文档是如何定义和使用的。
一般有这样的。
typedef __packed struck test_s
test_t;
还有这种事情。
typedef struck __attribute__(packed)) test_s
test_t;
实际上,packed or attribute (packed) 关键字的目的是在打包数据时将其与 1 对齐,例如,当您使用它来修改结构或联合时,这些成员之间就没有间隙了。 如果未添加,则结构或联合将按其自然对齐方式对齐。 例如,一个 CPU 架构的编译器默认对齐方式是 4,int 的大小也是 4,char 的大小是 1,所以是相似的。
typedef __packed struck test_s
char a;
int b;
test_t;
以这种方式定义的结构的大小为 8 个字节。
如果添加 packed,大小将变为 5 个字节,并且两者之间没有间隙。
-
这是 C++ 的语言扩展。
您需要参考相应的编译器文档才能理解。
我在 VisualC++ 中没有这种语法。
-
无论这是否是标准的,它都是由编译器定义的。
-
我不知道这篇文章对你是否有用。
满意的答案null6 level2010-12-10你是想简单地删除,还是取消这个结构体的这个项目 后续问题:删除所有存储在结构体中的数据 答:如果是int型,我们一般等于0 如果是指针型,一般指向nullstruct add; main() 但这样做似乎没什么意思,你能告诉我你想做什么吗? >>>More
C语言结构定义:struct是结构关键字,tag是结构的符号,member-list是结构成员的列表,它必须列出它的所有成员; variable-list 是此结构声明的变量。 >>>More
原因:因为你没有在结构的末尾添加; ,那么说明你的结构定义还没有结束,那么下面的主要功能就是你的结构了,所以会上报"定义中的类型过多"错。 >>>More
因为你是一个联盟,所以它在内存中一次只能容纳一个成员,社区占用的记忆长度等于最长成员的长度。 这里社区占用两个字节(一个字符占用一个字节); >>>More