当前位置:  技术问答>linux和unix

struct 结构内存对齐问题.

    来源: 互联网  发布时间:2016-12-17

    本文导语:  代码如下: struct test{ unsigned int test1;       //4b unsigned int test2;       //4b unsigned char c1;           //1b unsigned short int test3;   //2b char c2;                    //1b };               ...

代码如下:

struct test{
unsigned int test1;       //4b
unsigned int test2;       //4b
unsigned char c1;           //1b
unsigned short int test3;   //2b
char c2;                    //1b
};                            //总共=12b ;__attribute__((packed))不使用内存对齐
int main(int argc, char* argv[])
{
printf("%d n",sizeof(struct test));
return 0;
}



奇怪的是输出的是16而不是12.
为什么会这样呢.

|
    unsigned char c1;              //1b
-->这里填充额外的3 bit,共占4b。

    unsigned short int test3;   //2b
    char c2;                    //1b
-->这里填充1 bit,与test3共占4b

这个结构体就有了4个4 bit,共16 bit。

根据楼主描述而猜测,暂未实际测试验证过。

|
在C专区看到的

字节对齐的三个原则

1) 结构体变量的首地址能够被其最宽基本类型成员的大小所整除
2) 结构体每个成员相对于结构体首地址的偏移量(offset)都是成员大小的整数倍,如有需要编译器会在成员之间加上填充字节(internal adding)
3) 结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要编译器会在最末一个成员之后加上填充字节(trailing padding)

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • linux 下结构struct ethhdr,struct iphdr在那个头文件下;谢谢!!
  • struct __una_u16结构是什么结构.
  • 在Qt中,不知道如何定义结构变量-struct?
  • 请教struct sembuf的结构是怎样,急!急!急!!!!!!!!
  • ubuntu11.04 task_struct结构
  • linux中有没有这个结构体 struct _pool_st
  • 知道TCP/UDP的包头,如何判断其应用层协议类型,struct tcphdr和 struct udphdr结构中那个变量能判断应用层协议类型。
  • struct timeval结构体的作用是什么呢?谢谢
  • 进程运行时,内核的哪部分来维护task_struct结构?
  • php开源软件 iis7站长之家
  • 请问:unix中struct timeval结构在那个头文件里定义?
  • struct sockaddr_in 这个结构在哪里定义的?
  • linux网络套接字//accept参数为什么不用struct sockaddr结构体?
  • 求助:在java中如何使用象C中struct的数据结构???
  • struct dirent数据结构到底是怎样的啊???
  • 求教:struct dirent结构中用于存放文件名的d_name,它的长度究竟是1还是255?
  • 如何在用户进程中获取当前进程的task_struct结构地址?
  • IPv4 套接字地址结构转换(char to struct sockaddr_in) 看不懂
  • C#中结构(struct)的部分初始化和完全初始化实例分析
  • 这个结构体(struct file_operations fh_sbr_dev_ops)是什么意思?
  • java命名空间java.sql类types的类成员方法: struct定义及介绍
  • typedef_struct与struct之间的区别
  • java命名空间java.sql接口struct的类成员方法: getsqltypename定义及介绍
  • struct sock *sk和 struct sk_buff *skb之间的关系
  • java命名空间java.sql接口struct的类成员方法: getattributes定义及介绍
  • struct task_struct * get_current(void)函数的解释--help!!
  • 任意struct問題
  • Linux内核中work_struct的定义
  • struct 也有构造器吗?
  • struct dirent的问题
  • 关于struct timespec的一个问题


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3