当前位置: 首页 > news >正文

字面量优化、alignas和alignof、属性说明符和标准属性

29. 字面量优化

  • C++原生字符串:在C++中,原生字符串(raw string)是以 R 开头的字符串字面量,允许你在字符串中包含反斜杠、引号等特殊字符而无需进行转义。其语法形式如下:
    • delimiter 是一个可选的分隔符,可以用任意的字符指定。如果没有特别需求,通常不用指定。
    • raw_characters 是字符串内容,可以包含任何字符,包括 \",这些都不需要进行转义。
R"delimiter(raw_characters)delimiter"

30. alignas和alignof(C++11 C++17)

alignasalignof 是 C++11 引入的用于控制和查询数据对齐的关键字,它们允许开发者显式地指定和检查数据的内存对齐方式。在某些特定情况下(如 SIMD、硬件访问优化等),对齐方式对性能和正确性有着重要影响。

  • alignof:查询类型的对齐要求, alignof 是用来查询给定类型的对齐要求的表达式。它返回的是某个类型或变量的对齐方式(以字节为单位)。

  • alignas:显式指定对齐方式

alignas 用于显式指定变量或类型的对齐要求。对齐要求是一个以字节为单位的数值,表示内存地址必须是该对齐值的倍数。通过 alignas,可以指定比默认对齐方式更严格的对齐要求,或者使其符合系统硬件要求。

  • alignment:指定对齐要求的字节数,必须是2的幂。
  • type:变量的类型。
  • variable:变量的名称。
// alignas(alignment) type variable;
// alignas(alignment) struct/union/class {...};#include <iostream>struct alignas(16) S {int a;double b;
};int main() {alignas(32) int x; // 显式指定 x 的对齐方式为 32 字节std::cout << "Alignment of S: " << alignof(S) << std::endl;             // 输出 16std::cout << "Alignment of x: " << alignof(decltype(x)) << std::endl;   // 输出 4std::cout << "Alignment of x: " << __alignof(x) << std::endl;           // 输出 32(msvc)
}

31. 属性说明符和标准属性

  • gcc: __attribute__
  • msvc: __declspec

C++ 标准属性说明符(Attributes)是从 C++11 引入的一种新的语法,用来为程序中的代码提供编译器指令、优化提示、或更精细的代码行为控制。属性提供了一种统一的机制,让开发者能为类、函数、变量等添加元数据,帮助编译器或工具理解代码意图。

[[attr, attr2, attr3(args)]]

其中 attr1, attr2, ... 是不同的属性,可以有多个属性用逗号隔开。每个属性可以接受参数,具体格式取决于属性本身。

  • 标准属性与编译器特定属性:C++ 标准属性使用 [[...]] 语法,不同于早期的编译器特定属性(如 __attribute____declspec)。标准属性具备更好的可移植性,尽量使用标准属性而非编译器特定属性。

  • 属性的顺序:多个属性之间的顺序没有严格要求,但尽量保持一致性,以提高代码的可读性。

  • 不支持所有平台:一些属性,如 [[likely]][[unlikely]],可能只在某些编译器上有性能上的优化效果。如果使用了不支持的属性,编译器会忽略它们,但不会报错。


http://www.mrgr.cn/news/54918.html

相关文章:

  • Java方法的递归调用
  • 27.2 动态分片方案和它要解决的问题
  • template <typename T>详解
  • 【力扣打卡系列】滑动窗口与双指针(乘积小于K的子数组)
  • 动态规划-子数组系列——乘积最大子数组
  • 文心一言 VS 讯飞星火 VS chatgpt (373)-- 算法导论24.4 5题
  • SpringBoot3整合RocketMQ问题处理
  • Qt 实战(11)样式表 | 11.2、使用样式表
  • 单元化架构,分布式系统的新王!
  • Java学习教程,从入门到精通, Java 基础语法(4)
  • VMware虚拟机三种网络模式详解
  • 【计网笔记】以太网
  • 深度学习-2:数据向量化
  • python 函数式编程
  • 死锁的具体案例分析
  • 集合框架14:TreeSet概述、TreeSet使用、Comparator接口及举例
  • 基于深度学习的地形分类与变化检测
  • 快速学会一个算法:Faster R-CNN进行目标检测!
  • leetcode day1
  • resnetv1骨干