数据对齐的理解与一道组成原理题的详细解释
首先需要解释的是数据对齐到底是什么,为什么有,如何处理。
以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后留白一个字节。
所以,问题得解。
数据对齐的理解与一道组成原理题的详细解释相关推荐
- 关于大量数据的随机打乱重保存.(少了详细解释,之后会更新)
ps:想要数据随机打乱时遇到由于数据量太大导致电脑卡死: def myshuffle(path,save_path,b,bb):for parent, dirnames, filenames in o ...
- 计算机组成原理——关于数据对齐存储
计算机组成原理--关于数据对齐存储 1. 综述 博客:http://blog.csdn.net/cyxcw1/article/details/9080519(C/C++数据边界对齐的注意事项) 对齐: ...
- 计算机组成原理题库(唐朔飞)
计算机组成原理题库 ~~02|01|1|2|A0400047_010_1|871 ^^通常划分计算机发展时代是以( )为标准的. A.所用电子器件 B.运算速度 C.计算机结构 D.所用语言 ^^A ...
- 内存对齐/字节对齐/数据对齐/地址总线对齐
其实是使用InitializeAcl()时发现有个aligned,可我不知道什么是aligned 于是乎我就先搜索了对齐,结果发现了一大堆,什么[字节对齐].[内存对齐].[地址总线 对齐].[数据对 ...
- 【数据结构】 最小生成树(四)——利用kruskal算法搞定例题×3+变形+一道大水题...
在这一专辑(最小生成树)中的上一期讲到了prim算法,但是prim算法比较难懂,为了避免看不懂,就先用kruskal算法写题吧,下面将会将三道例题,加一道变形,以及一道大水题,水到不用高级数据结构,建 ...
- 《一道论证题》by孙宇晨
<一道论证题>--谨以此文,献给所有有理想的人.by孙宇晨 论证题:高中可以用一年的时间弥补任何的遗憾,只要你下定了决心. 很遗憾,我不是那些某调查机构,有强大的财团支持.我无法做广泛的调 ...
- 一道ctf题关于php反序列化字符逃逸
0x01 前言 无意间做应该是0ctf2016的一道web题,get新点,总计一下. 0x02 代码审计 进去之后是一个登录界面,试了一下register.php发现可以注册,注册完成后登录跳转到up ...
- 简单tarjan》一道裸题(BZOJ1051)(easy)
这是一道水题,实际考察的是你会不会写强连通分量...(在BZOJ上又水了一道题) Description 每一头牛的愿望就是变成一头最受欢迎的牛.现在有N头牛,给你M对整数(A,B),表示牛A认为牛B ...
- CSU 1785: 又一道简单题
1785: 又一道简单题 Submit Page Summary Time Limit: 5 Sec Memory Limit: 128 Mb Submitted: 602 ...
最新文章
- 硬盘运行微型linux,linux用smartctl看硬盘运行了多少小时
- docker自动部署
- delphi 常用属性/方法《转》
- 取证 c语言实现日志导出_日志与日志不一样:五种不能忽略的日志源
- Java 设计模式(3)单例模式
- FTC再度对Facebook提起反垄断诉讼,要求其出售Instagram和WhatsApp
- position的absolute;fixed;relative;static;inherit属性小结
- 【Linux学习】Vim 怎么设置显示行号以及永久性显示行号
- android 校验手机号码,检查Android中的有效手机号码
- 御剑端口扫描工具2020下载
- 阿里云对象存储OSS有什么功能?
- 计算机类sci四大水刊,官方证实:「四大水刊」之一的 ONCOTARGET 2018年起将不再被 SCI 收录,你怎么看?...
- CPU纯软件全虚拟化技术
- 用牛顿迭代法求下面方程在1.5附近的根:2x^3-4x^2+3x-6=0
- C语言/C++编程学习:和QT零距离接触的意义
- 准确率、精度和召回率
- 性能调优 - JVM
- MFC中英文切换实现过程中遇到的问题
- linux和mac下的电骡 amule 2.2.6下载,跨平台电骡 aMule 2.2.6
- python re 数据正则化匹配--笔记总览
热门文章
- Linux程序文件状态,linux 文件状态标识和IO操作方式
- Aix下运行java程序_AIX上部署java项目
- 柱状图带立体效果_PS教程!手把手教你打造立体感欧美风人像大片效果(已打包好素材资料见文末)...
- TTL怎么计算拉电流和灌电流_预付费电表工作原理 是怎么实现断电功能
- mysql 查询 更新属性值_MySQL-在一个查询中更新具有不同值的多行
- python释放变量内存_2020Python面试题:Python是如何进行内存管理的?
- apache 网站转nginx_堡塔网站加速宝塔面板网站加速安装设置使用教程
- python向下_如何在python中向下转换
- android 自定义字体_Android自定义字体教程
- Android Wear Hello World