gpt4 book ai didi

c - 不同数据类型的内存对齐是否不同

转载 作者:太空狗 更新时间:2023-10-29 15:10:40 29 4
gpt4 key购买 nike

在C中做不同的数据类型如char, short, int, long, float, double 有不同的内存对齐边界?在 32 位字对齐的字节可寻址操作系统中,访问 charshort 与访问 intfloat< 有何不同?在这两种情况下,CPU 是否都读取了一个完整的 32 位字?当 int 不在边界时会发生什么?它如何能够读取任意内存地址的 char

最佳答案

正如其他人所指出的那样,简短的回答是编译器会为它要编译到的架构做最好的事情。它可能会将它们与 native 字号对齐。它可能不会。这是一个演示这一点的示例程序:

#include <iostream>

int main()
{
using namespace std;

char c;
short s;
int i;

cout << "sizeof(char): " << sizeof(char) << endl;
cout << "sizeof(short): " << sizeof(short) << endl;
cout << "sizeof(int): " << sizeof(int) << endl;

cout << "short is " << (int)&s - (int)&c << " bytes away from a char" << endl;
cout << "int is " << (int)&i - (int)&s << " bytes away from a short" << endl;
}

输出:

sizeof(char): 1
sizeof(short): 2
sizeof(int): 4
short is 1 bytes away from a char
int is 4 bytes away from a short

如您所见,它在 int 和 short 之间添加了一些填充。它没有理会短裤。在其他情况下,情况可能正好相反。优化规则复杂。

还有一个警告:编译器比你聪明。除非你有非常非常好的理由,否则不要玩填充和对齐。相信编译器所做的是正确的。

关于c - 不同数据类型的内存对齐是否不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2067096/

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