博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
结构体内存对齐具体解释
阅读量:7076 次
发布时间:2019-06-28

本文共 514 字,大约阅读时间需要 1 分钟。

.在32位机器上

设有以下说明和定义:
1234567891011 typedef union { long i; int k[5]; char c; } DATE; struct data { int cat; DATE cow; double dog; } too; DATE max;
则语句 printf(“%d”,sizeof(struct data)+sizeof(max));的运行结果是:
(答案:52)

这道题可能非常多同学都有误区。不明确内存对齐的真正含义,那么以下我来解说一下,首先共用体里面你们肯定都是明确的。DATE是一个union, 变量公用空间. 里面最大的变量类型是int[5], 占用20个字节. 所以它的大小是20 。

可是到了结构体里面。事实上它是这种。首先一个Int,然后后面5个int,再然后是一个double,所以最大的成员长度是8不是20,然后6个int刚刚24,然后加上8是32。加上共用体是52,假设你把第一个Int cat去掉,你仍然会发现。结构体大小还是32。由于8个字节内存对齐,前面2个int一组。最后还单一个int也要占8个字节。希望能对内存对齐不明确的童鞋有所帮助。

转载地址:http://xgdml.baihongyu.com/

你可能感兴趣的文章
PowerPC VxWorks BSP分析(2)--PowerPC汇编
查看>>
CentOS6.5网络设置
查看>>
Mobile First! Wijmo 5 之 架构
查看>>
比较使用sql*loader的直接加载方式和传统加载方式的性能差异
查看>>
MongoDB复制集(Replication Sets)介绍
查看>>
javax.persistence.NoResultException: No entity found for query
查看>>
网络常见劫持杂谈
查看>>
Mysql完全备份
查看>>
使用Java窃取sina大片
查看>>
榕树下单身作者大征募!
查看>>
SQL Server T-SQL高级查询
查看>>
Python自省(反射)指南[转]
查看>>
阿里巴巴公布了一份最新的AI成绩单
查看>>
TableCell自适应表格高度
查看>>
Azure ARM (4) 开始创建ARM Resource Group并创建存储账户
查看>>
jQuery学习笔记开篇
查看>>
基于Xcode5的本地化
查看>>
【Linux高级驱动】linux设备驱动模型之平台设备驱动机制【转】
查看>>
Windows Embedded Standard开发初体验(一)
查看>>
与二进制有关的几道面试题
查看>>