标签: alignof

sizeof和alignof有什么区别?

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);
}
Run Code Online (Sandbox Code Playgroud)

将输出

1/1 1/1 2/2 2/2 4/4 4/4 4/4 4/4 4/4 8/8 8/8 8/8

我想我不知道对齐是什么......?

c++ sizeof c++11 alignof

45
推荐指数
6
解决办法
1万
查看次数

对于所有对象类型T,sizeof(T)> = alignof(T)总是这样吗?

对于任何对象类型T,它总是sizeof(T)至少与大小一样大alignof(T)吗?

直观地看起来如此,因为即使你调整对象的对齐方式,例如:

struct small {
  char c;
};
Run Code Online (Sandbox Code Playgroud)

通常情况下,它们的"大小"也会向上调整,以便在保持对齐的同时,阵列中对象之间的关系是有意义的(至少在我的测试中.例如:

struct alignas(16) small16 {
  char c;
};
Run Code Online (Sandbox Code Playgroud)

两者的大小和对齐都是16.

c++ memory-alignment c++11 alignof

42
推荐指数
4
解决办法
2259
查看次数

`std :: alignment_of`与`alignof`

我偶然发现了std::alignment_of类型特征,以及即将成为朋友的类型特征std::alignment_of_v.它们似乎专门设计为等同于普通调用alignof,并且未来添加_v帮助程序表明它不仅仅是遗留位.

有什么用的std::alignment_of(_v),当我们有alignof

c++ memory-alignment alignof c++17

11
推荐指数
2
解决办法
1104
查看次数

如何在D中对齐结构成员?

我试过这个

struct Foo(T)
{
    align(8) void[T.sizeof] data;
}
Run Code Online (Sandbox Code Playgroud)

static assert(Foo!(int).data.alignof == 8);
Run Code Online (Sandbox Code Playgroud)

失败了,告诉我对齐仍然是1代替8.

为什么这样,以及如何修复它,以便它适用于2的幂(不仅仅是8)的任意对齐?

d alignment alignof

5
推荐指数
1
解决办法
219
查看次数

C++基元类型的对齐和大小

在C++中,似乎所有的整数类型(int,long long int,std::uint16_t,...)和浮点类型,它始终是sizeof(T) == alignof(T).

这个编译器/平台是特定的,还是保证是真的?是否有一个平台,其中int32_ts不需要在32位边界上对齐(只要它们不重叠)?

c++ memory-alignment alignof

4
推荐指数
1
解决办法
550
查看次数

标签 统计

alignof ×5

c++ ×4

memory-alignment ×3

c++11 ×2

alignment ×1

c++17 ×1

d ×1

sizeof ×1