首先需要解释的是数据对齐到底是什么,为什么有,如何处理。

以2012年408统考的一道题目为例,详细解释其中的细小知识点:

某计算机存储器按照字节编址,采用小端方式存储数据,假定编译器规定int和short型长度分别为32位和16位,并且数据按照边界对齐存储。 某C语言的程序段如下:

struct
{int a;char b;short c;
} record;
record.a = 273;

若record变量的首地址为0xC008,则地址0xC008的内容以及record.c的地址分别为:
A. 0x00、0xC00D
B. 0x00、0xC00E
C. 0x11、0xC00D
* D. 0x11、0xC00E

这种题目需要很小心每一个知识点的运用,一步错全全错。

首先,小端存储是指:数据的高位存在高地址,数据的低位存在低地址。

比如十六进制数0x123456,则我们知道12是最高位,34其次,56最低。那么存储的时候,如果用的是小端序,内存地址最小的那个用来存储56,地址增大一些存34,再高一些存12.

这里,其实我还要一个没弄明白的问题,分配的int数据,这个地址是高位还是低位?
当然按照题目的做法是,指代低位,继续增长。因此,一个int数据的4个字节,0xC008指代的是最小的地址。
现在我们把这个假定为一个条件,不去细说(我还不知道怎么来的)。

接着,重点在于对齐,结构体中会根据第一个数据的大小进行对齐。
问题来了,我们是按照最大数据进行对齐还是按照第一个数据进行对齐?

不同机器上的对齐策略不同,一般按照int的4个字节进行对齐。
而这个结构体共7个字节,所以对齐后是8个字节。

那么这个留空的字节位置在哪?

就需要牵涉到变量起始地址的问题。

规定:变量的起始地址必须能够被自身数据类型的大小整除。

对于273,十六进制是0x111,因此第一个低位字节存储0x11,再高一点的字节存储0x01,后面两个字节为空的不管。好了,看存储char b,这个大小是1个字节,存完之后,如果紧接着就存short c,那么c的起始地址是个奇数,不能被2整除。
因此在char b后留白一个字节。

所以,问题得解。

数据对齐的理解与一道组成原理题的详细解释相关推荐

  1. 关于大量数据的随机打乱重保存.(少了详细解释,之后会更新)

    ps:想要数据随机打乱时遇到由于数据量太大导致电脑卡死: def myshuffle(path,save_path,b,bb):for parent, dirnames, filenames in o ...

  2. 计算机组成原理——关于数据对齐存储

    计算机组成原理--关于数据对齐存储 1. 综述 博客:http://blog.csdn.net/cyxcw1/article/details/9080519(C/C++数据边界对齐的注意事项) 对齐: ...

  3. 计算机组成原理题库(唐朔飞)

    计算机组成原理题库 ~~02|01|1|2|A0400047_010_1|871 ^^通常划分计算机发展时代是以( )为标准的. A.所用电子器件 B.运算速度 C.计算机结构 D.所用语言 ^^A ...

  4. 内存对齐/字节对齐/数据对齐/地址总线对齐

    其实是使用InitializeAcl()时发现有个aligned,可我不知道什么是aligned 于是乎我就先搜索了对齐,结果发现了一大堆,什么[字节对齐].[内存对齐].[地址总线 对齐].[数据对 ...

  5. 【数据结构】 最小生成树(四)——利用kruskal算法搞定例题×3+变形+一道大水题...

    在这一专辑(最小生成树)中的上一期讲到了prim算法,但是prim算法比较难懂,为了避免看不懂,就先用kruskal算法写题吧,下面将会将三道例题,加一道变形,以及一道大水题,水到不用高级数据结构,建 ...

  6. 《一道论证题》by孙宇晨

    <一道论证题>--谨以此文,献给所有有理想的人.by孙宇晨 论证题:高中可以用一年的时间弥补任何的遗憾,只要你下定了决心. 很遗憾,我不是那些某调查机构,有强大的财团支持.我无法做广泛的调 ...

  7. 一道ctf题关于php反序列化字符逃逸

    0x01 前言 无意间做应该是0ctf2016的一道web题,get新点,总计一下. 0x02 代码审计 进去之后是一个登录界面,试了一下register.php发现可以注册,注册完成后登录跳转到up ...

  8. 简单tarjan》一道裸题(BZOJ1051)(easy)

    这是一道水题,实际考察的是你会不会写强连通分量...(在BZOJ上又水了一道题) Description 每一头牛的愿望就是变成一头最受欢迎的牛.现在有N头牛,给你M对整数(A,B),表示牛A认为牛B ...

  9. CSU 1785: 又一道简单题

    1785: 又一道简单题 Submit Page    Summary    Time Limit: 5 Sec     Memory Limit: 128 Mb     Submitted: 602 ...

最新文章

  1. 硬盘运行微型linux,linux用smartctl看硬盘运行了多少小时
  2. docker自动部署
  3. delphi 常用属性/方法《转》
  4. 取证 c语言实现日志导出_日志与日志不一样:五种不能忽略的日志源
  5. Java 设计模式(3)单例模式
  6. FTC再度对Facebook提起反垄断诉讼,要求其出售Instagram和WhatsApp
  7. position的absolute;fixed;relative;static;inherit属性小结
  8. 【Linux学习】Vim 怎么设置显示行号以及永久性显示行号
  9. android 校验手机号码,检查Android中的有效手机号码
  10. 御剑端口扫描工具2020下载
  11. 阿里云对象存储OSS有什么功能?
  12. 计算机类sci四大水刊,官方证实:「四大水刊」之一的 ONCOTARGET 2018年起将不再被 SCI 收录,你怎么看?...
  13. CPU纯软件全虚拟化技术
  14. 用牛顿迭代法求下面方程在1.5附近的根:2x^3-4x^2+3x-6=0
  15. C语言/C++编程学习:和QT零距离接触的意义
  16. 准确率、精度和召回率
  17. 性能调优 - JVM
  18. MFC中英文切换实现过程中遇到的问题
  19. linux和mac下的电骡 amule 2.2.6下载,跨平台电骡 aMule 2.2.6
  20. python re 数据正则化匹配--笔记总览

热门文章

  1. Linux程序文件状态,linux 文件状态标识和IO操作方式
  2. Aix下运行java程序_AIX上部署java项目
  3. 柱状图带立体效果_PS教程!手把手教你打造立体感欧美风人像大片效果(已打包好素材资料见文末)...
  4. TTL怎么计算拉电流和灌电流_预付费电表工作原理 是怎么实现断电功能
  5. mysql 查询 更新属性值_MySQL-在一个查询中更新具有不同值的多行
  6. python释放变量内存_2020Python面试题:Python是如何进行内存管理的?
  7. apache 网站转nginx_堡塔网站加速宝塔面板网站加速安装设置使用教程
  8. python向下_如何在python中向下转换
  9. android 自定义字体_Android自定义字体教程
  10. Android Wear Hello World