操作系统 - 关于信息存储边界和字节对齐的疑问

查看:100
本文介绍了操作系统 - 关于信息存储边界和字节对齐的疑问的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

就我目前理解的来说: 数据在内存中会根据字长的大小对其存储,如字长32位,则未满32位的数据会对齐填充使之达到32位,超过32位则会把超过的部分放到下一个32位中。
比如我有这样的数据: A(8字节) B(8字节) C(8字节) D(4字节) E(8字节)
那么对于字长32位的系统来说在内存中会被这样存储(下划线表示被划分在同一个32位的空间内):

A B C D [字节填充]  E XXXXXXXXXXXXXXX
-----------------  -----------------

而这样做的目的是读取数据的时候可以一次就读取到完整的数据,那么为什么读取的时候不能定位到需要读取的数据的起始地址呢?比如这样的排列的话(下划线表示地址上连续):

A B C D E
---------

那么当要读取数据E的时候,定位到E的起始地址再读取数据,这样同样可以一次性读取到所需的数据。
我的疑惑就在于为什么读取数据的时候不定位到目标数据的起始地址再读取?
请问目前我的理解是否有问题?

解决方案

首先你要知道数据对齐是编译器做的。它也可以不这么做。

为什么不定位到数据开头再读呢?因为字长是(比如说)8个字节啊,也就是说你只能定位到8的倍数的字节数那里。就像数据有八列N行,你一次只能读一整行,多出来的你就扔掉;你要的数据分到两行里了,你就读两次。

这篇关于操作系统 - 关于信息存储边界和字节对齐的疑问的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆