在32位机上: struct D{ int a; union { int b; double c; }; struct D *ptr[2]; }; sizeof(struct D)为什么不是24呢? 我是这样理解的,int a ( 4 ) union( 8 ) struct D *[2] ( 8 ) 4 + 8 + 8 = 20 结构体按照元素最大对齐方式进行对齐,那就是按照double对齐,应该是24byte. 用GCC测出来是20byte. 请问是什么原因?谢谢
看看下面这个代码,在x86和arm平台有什么区别: unsigned int i = 0x12345678; unsigned char *p=NULL; unsigned short *p1=NULL; p=&i; *p=0x00; p1=(unsigned short *)(p+1); *p1=0x0000;
struct S{ int a; // 4 char c[10]; // 12 unsigned long b; // 4 } 那么sizeof(S)=20 好像没错:mrgreen: 我明白字节对齐,可是不明白计算机为什么要搞这么一个东西。 引用解释: “对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能从某些特定地址开始存取。其他平台可能没有这种情况,但是最常见的是如果不按照适...
struct socket_ipv4{ u_int32_t addr; u_int16_t port; }; 该结构体sizeof(struct socket_ipv4)=8,如何让sizeof(struct socket_ipv4) 由于该结构体中第一个结构单元是长整型4个字节,第二个结构单元是短整型两个字节, 所以结构体struct socket_ipv4要在4字节对齐,我现在想让它不对齐,不知道编译 的时候是否有设置不对齐编译的选项?
我在网上看到这样一段: [quote]结构,联合,或者类的数据成员,第一个放在偏移为0的地方,以后每个数据成员的对齐,按照#pragma pack指定的数值和这个数据成员自身长度中,比较小的那个进行。 也就是说,当#pragma pack的值等于或超过所有数据成员长度的时候,这个值的大小将不产生任何效果。 而结构整体的对齐,则按照结构体中最大的数据成员 和 #pragma pack指定值 之间,较小的那个进行。[/quote] 然后我自己测试如下: [quot...
有一个结构: #pragma pack 4 typedef struct{ char a[2]; short b; int c; char d[2]; char e[10]; }StructDemo; #pragma HP_ALIGN HPUX_NATURAL 上面这个结构在hp ux 11 上它的大小是20字节,我觉得是正常的,按4个字节对齐,但在11i 的机器上结果却是24字节。 编译的时候都只加了-Ae选项。 有哪位知道这是由于什么原因? 怎么解决? 万分感谢。
#pragma pack (1) typedef struct bit { uint a:3; uint b:2; uint c:3; }BIT; sizoef(BIT)怎么成1了??? 我是在dev c++下test的 gcc 的__attribute__ ((packed))没试!!!!!
typedef struct { unsigned char first; unsigned char len; unsigned char cmd; unsigned char seq[2]; } ctl_head_t; 我希望它占5个字节,可以实际却是8个字节。 编译器:arm-elf-gcc 2.95.3 该如何办?
该结构大致如下: struct TestStruct { int data1; char data2; char data3; }; 对应的Python代码: import struct s = struct.unpack("icc", buf) #buf是从网络接收的字节流 结果却报“Unpack str size does not match format”错。 很明显是C++ struct产生的size和Python解码所需的不同。于是检查C++的struct size: printf ("size=%d\n", sizeof(TestStruct)); 结果得8。 而 struct.calcsize("icc") 结果却是6。 仔...