gpt4 book ai didi

c++ - 了解对齐概念

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:28:49 25 4
gpt4 key购买 nike

An alignment is an implementation-defined integer value representing the number of bytes between successive addresses at which a given object can be allocated.

这个概念有点不清楚。例如:

struct B { long double d; };
struct D : virtual B { char c; }

When D is the type of a complete object, it will have a subobject of type B, so it must be aligned appropriately for a long double.

这是什么意思? sizeof(long double) 是那种情况下的字节数??

最佳答案

大多数 CPU 都有关于数据存储位置的“偏好”。读取或写入内存地址时,如果地址与您尝试写入的数据大小不匹配,操作可能会变慢(或完全非法)。例如,通常要求从可被 4 整除的地址开始分配 4 字节整数。

也就是说,存储在地址 7 上的 int 要么效率较低,要么完全非法,具体取决于您的 CPU。但如果它存储在地址 8,CPU 会很高兴。

这就是对齐表达的意思:对于 T 类型的任何对象,其地址必须被什么整除才能满足 CPU 的要求?”

在 C++ 中,对象的对齐由实现定义(因为,​​如上所述,它取决于 CPU 架构)。 C++ 只是说每个对象都有对齐方式,并描述了如何确定复合对象的对齐方式。

“为 long double 对齐”只是意味着必须分配对象,以便将其第一个字节放置在对 long double 有效的地址中.如果 CPU 体系结构指定 long double 的对齐方式为 10(例如),则意味着每个具有此对齐方式的对象都必须分配在可被 10 整除的地址上。

关于c++ - 了解对齐概念,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24765507/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com