当前位置:  开发笔记 > 编程语言 > 正文

如何找到结构的大小?

如何解决《如何找到结构的大小?》经验,为你挑选了3个好方法。

与其他一些答案所说的相反,在大多数系统中,如果没有编译指示或编译器选项,结构的大小将至少为6个字节,而在大多数32位系统上,则为8个字节.对于64位系统,大小很容易为16个字节.对齐确实起作用; 总是.单个结构的大小必须使得可以分配这些大小的数组,并且阵列的各个成员对于所讨论的处理器充分对齐.因此,如果结构的大小是其他人假设的5,那么两个这样的结构的数组将是10个字节长,并且第二个数组成员中的char指针将在奇数字节上对齐,这将是(在大多数情况下)处理器)导致性能的主要瓶颈.



1> Simon Buchan..:
#include 

typedef struct { char* c; char b; } a;

int main()
{
    printf("sizeof(a) == %d", sizeof(a));
}

我在32位机器上得到"sizeof(a)== 8".结构的总大小将取决于打包:在我的情况下,默认打包为4,因此'c'需要4个字节,'b'需要一个字节,剩下3个填充字节将它带到下一个4的倍数:8.如果你想改变这种打包方式,大多数编译器都有办法改变它,例如,在MSVC上:

#pragma pack(1)
typedef struct { char* c; char b; } a;

给sizeof(a)== 5.如果这样做,请小心在任何库头之前重置打包!


为了确保它有效:printf("sizeof(a)==%d",(int)sizeof(a));'

2> Jonathan Lef..:

与其他一些答案所说的相反,在大多数系统中,如果没有编译指示或编译器选项,结构的大小将至少为6个字节,而在大多数32位系统上,则为8个字节.对于64位系统,大小很容易为16个字节.对齐确实起作用; 总是.单个结构的大小必须使得可以分配这些大小的数组,并且阵列的各个成员对于所讨论的处理器充分对齐.因此,如果结构的大小是其他人假设的5,那么两个这样的结构的数组将是10个字节长,并且第二个数组成员中的char指针将在奇数字节上对齐,这将是(在大多数情况下)处理器)导致性能的主要瓶颈.



3> Jeff Hubbard..:

如果要手动对其进行计数,则结构的大小仅是考虑对齐后其每个数据成员的大小。结构没有魔术开销字节。

推荐阅读
echo7111436
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有