gpt4 book ai didi

c++ - 为什么偏爱数据结构对齐?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:52:46 25 4
gpt4 key购买 nike

结构的每个成员的类型通常有一个默认的对齐方式,即每个结构成员都在预先确定的边界上对齐。出于这个原因,填充在以下 wiki 示例中执行:

struct MixedData
{
char Data1;
short Data2;
int Data3;
char Data4;
};



struct MixedData /* After compilation in 32-bit x86 machine */
{
char Data1; /* 1 byte */
/* 1 byte for the following 'short' to be aligned on a 2 byte boundary
assuming that the address where structure begins is an even number */
char Padding1[1];
short Data2; /* 2 bytes */
int Data3; /* 4 bytes - largest structure member */
char Data4; /* 1 byte */
char Padding2[3]; /* 3 bytes to make total size of the structure 12 bytes */
};

应保留对齐的(实际)原因是什么?

最佳答案

未对齐的读取和写入通常需要 CPU 从内存中获取两个相邻的字(而不是一个),并应用一些额外的按位算法才能正确执行指定的操作。

某些架构(如 x86)会以牺牲性能为代价允许它。其他架构(最著名的是 ARM)要么引发异常(通常会导致用户进程的 SIGBUS 信号),要么甚至将地址“舍入”到最近的边界,这可能会导致一些非常讨厌的问题错误。

关于c++ - 为什么偏爱数据结构对齐?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11099477/

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