Skip to content

Commit ad64d14

Browse files
committed
add note of charpter 30
1 parent 632a195 commit ad64d14

File tree

1 file changed

+20
-0
lines changed

1 file changed

+20
-0
lines changed

_posts/2024-10-01-现代C++语言核心特性解析.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -501,3 +501,23 @@ C++11引入`std::hexfloat`和`std::defaultfloat`,可以将浮点数输入输
501501
C++17允许使用十六进制浮点字面量
502502

503503
C++14定义二进制整数字面量,引入单引号作为整数分隔符,对于十进制、八进制、十六进制和二进制都有效。
504+
505+
## alignas和alignof(C++11 C++17)
506+
507+
正确的数据对齐可以有效的提升性能。
508+
509+
C++11引入alignof获取类型的对齐字节长度,alignas可以改变类型的默认对齐字节长度。
510+
511+
alignof是针对类型的。所有标量类型都适应std::max_align_t的对齐字节长度。
512+
513+
alignas接受类型或常量表达式,其计算结果必须是一个2的幂值。它既可以用于结构体,也可以用于结构体的成员变量。如果修改结构体成员的对齐字节长度,那么结构体本身的对齐字节长度也会发生变化,结构体类型的字节成都总是需要大于或等于其成员变量类型的对齐字节长度。
514+
515+
`std::alignment_of<>`可以获取类型的对齐字节长度。
516+
517+
`std::aligned_storage<>`可以分配一块指定对齐字节长度和大小的内存。
518+
519+
`std::aligned_union`可以接受`std::size_t`作为分配内存的大小以及不定数量的类型,并选择其中对齐字节长度最大的作为分配内存的对齐字节长度。
520+
521+
`std::align`可以返回一个缓冲区中最近的符合指定对齐字节长度的指针。
522+
523+
C++17中new运算发也拥有了根据对齐字节长度分配对象的能力。这并不需要额外的代码介入。

0 commit comments

Comments
 (0)