gpt4 book ai didi

c++ - sizeof 和 alignof 有什么区别?

转载 作者:IT老高 更新时间:2023-10-28 14:01:40 25 4
gpt4 key购买 nike

sizeof 和 alignof 有什么区别?

#include <iostream>

#define SIZEOF_ALIGNOF(T) std::cout<< sizeof(T) << '/' << alignof(T) << std::endl

int main(int, char**)
{
SIZEOF_ALIGNOF(unsigned char);
SIZEOF_ALIGNOF(char);
SIZEOF_ALIGNOF(unsigned short int);
SIZEOF_ALIGNOF(short int);
SIZEOF_ALIGNOF(unsigned int);
SIZEOF_ALIGNOF(int);
SIZEOF_ALIGNOF(float);
SIZEOF_ALIGNOF(unsigned long int);
SIZEOF_ALIGNOF(long int);
SIZEOF_ALIGNOF(unsigned long long int);
SIZEOF_ALIGNOF(long long int);
SIZEOF_ALIGNOF(double);
}

会输出

1/11/12/22/24/44/44/44/44/48/88/88/8

我想我不明白对齐是什么...?

最佳答案

嗯,“内存”基本上是一个巨大的字节数组。然而,像整数这样较大的东西需要超过 1 个字节来存储它们——例如,一个 32 位的值将使用 4 个连续字节的内存。

现在,您计算机中的内存模块通常不是“字节”;它们也以“并行”的几个字节组织,例如 4 个字节的 block 。

对于 CPU,在读取诸如整数之类的内容时,不“跨越”此类 block 边界会更容易 = 更高效 = 更好的性能:

memory byte    0 1 2 3     4 5 6 7       8 9 10 11
integer goooood
baaaaaaaaad

这就是“对齐”的意思:对齐 4 意味着这种类型的数据应该(或必须,取决于 CPU)从 4 的倍数的地址开始存储。

您观察到 sizeof==alignof 不正确;尝试结构。结构也将对齐(因为它们的各个成员需要以正确的地址结束),但它们的大小会大得多。

关于c++ - sizeof 和 alignof 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11386946/

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