ChinaUnix.net
相关文章推荐:

字节对齐 c编程

[code] [root@localhost wk64]# cat t2.c main(){ typedef struct A{ int a; char b; }A; typedef struct B{ char a; int b; }B; printf("A=%d,B=%d\n",sizeof(A),sizeof(B));//搞不懂为什么都是8,我以为A=5,B=8 } [root@localhost wk64]# ./t2 A=8,B=8 [/code]

by dxbh - C/C++ - 2008-05-07 13:27:52 阅读(1106) 回复(5)

相关讨论

在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. 请问是什么原因?谢谢

by hb12112 - C/C++ - 2011-10-28 12:44:01 阅读(3029) 回复(6)

看看下面这个代码,在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;

by arnina - C/C++ - 2007-09-13 23:17:54 阅读(1441) 回复(5)

struct S{ int a; // 4 char c[10]; // 12 unsigned long b; // 4 } 那么sizeof(S)=20 好像没错:mrgreen: 我明白字节对齐,可是不明白计算机为什么要搞这么一个东西。 引用解释: “对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能从某些特定地址开始存取。其他平台可能没有这种情况,但是最常见的是如果不按照适...

by vincol - C/C++ - 2008-08-10 19:37:17 阅读(3942) 回复(10)

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字节对齐,我现在想让它不对齐,不知道编译 的时候是否有设置不对齐编译的选项?

by bantouxiaoxue2 - C/C++ - 2007-07-29 11:30:56 阅读(2011) 回复(3)

在论坛上,经常看到别人在那里说什么“字节对齐”,到底什么是“字节对齐”,请哪个高手指点一下。

by sea313081574 - C/C++ - 2006-11-05 09:06:41 阅读(904) 回复(2)

我在网上看到这样一段: [quote]结构,联合,或者类的数据成员,第一个放在偏移为0的地方,以后每个数据成员的对齐,按照#pragma pack指定的数值和这个数据成员自身长度中,比较小的那个进行。 也就是说,当#pragma pack的值等于或超过所有数据成员长度的时候,这个值的大小将不产生任何效果。 而结构整体的对齐,则按照结构体中最大的数据成员 和 #pragma pack指定值 之间,较小的那个进行。[/quote] 然后我自己测试如下: [quot...

by jovesky - C/C++ - 2006-08-12 16:51:25 阅读(3586) 回复(27)

有一个结构: #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选项。 有哪位知道这是由于什么原因? 怎么解决? 万分感谢。

by mosaic - HP-UX - 2004-07-20 20:16:25 阅读(646) 回复(0)

#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))没试!!!!!

by ubuntuer - C/C++ - 2009-09-03 11:15:37 阅读(934) 回复(1)

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 该如何办?

by cjaizss - 内核/嵌入技术 - 2006-08-17 10:07:34 阅读(792) 回复(8)

该结构大致如下: 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。 仔...

by blackjimmy - Python文档中心 - 2009-08-21 10:58:50 阅读(1636) 回复(0)