zoukankan      html  css  js  c++  java
  • 字节对齐

    字节对齐,又叫内存对齐,个人理解就是一种C++中的类型在内存中空间分配策略。每一种类型存储的起始地址,都要求是一个对齐模数(alignment modulus)的整数倍。问题来了,为什么要有这种策略?计算中内存中的数据就是一个一个的字节(byte),直接按照一个字节一个字节存储就得了,为什么还要那么麻烦。把问题想简单了。

    各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能从某些特定地址开始存取。比如有些架构的CPU在访问 一个没有进行对齐的变量的时候会发生错误,那么在这种架构下编程必须保证字节对齐.其他平台可能没有这种情况,但是最常见的是如果不按照适合其平台要求对 数据存放进行对齐,会在存取效率上带来损失。

    计算机CPU一次处理可以处理多个字节,就拿32位系统来说,CPU一次可以处理32bit的数据,也就是4个字节。比如有些平台每次读都是从偶地址开始,假设有一个int型数据,存放在内存地址0x1的位置。CPU要读取这个int数据,并且从地址0x0开始读取数据。一次读取4字节,那么这个int型还有一个字节没有读到,就得再读取一次剩下的那一个字节,并且还要进行位操作,把两次读取的数据合并为一个int型数据。两个字–麻烦,效率太低了。那怎么办呢?为了提高效率,干脆在存储的时候把这个int数据放在内存地址0x4的位置,0x1、0x2、0x3的位置都空着,CPU直接从0x4取数据,只需一次就取到了这个数据,还不用进行位操作。就是拿空间换时间,没办法,谁让现在的存内存越来越大了呢?

    个人小站:http://jun10ng.work/ 拥抱变化,时刻斗争,走出舒适圈。
  • 相关阅读:
    下载Web微信视频
    强制删除无用old windows文件夹命令
    BitLocker 加密工具挂起和恢复命令行(windows7)
    R 统计学工具部署和使用
    Microsoft Azure 01 (Summarize)
    RocketMQ原理
    专业术语概念
    序列化-ProtoBuf
    Kafka安装与集群部署
    Redis中使用Lua脚本
  • 原文地址:https://www.cnblogs.com/Jun10ng/p/12348266.html
Copyright © 2011-2022 走看看