C++11特性(18):对齐方式

C++11新增关键字~alignas(struct对齐、sizeof、alignof) 本文记录alignas关键字,同时介绍alignof和sizeof. 阅读详情
#include <iostream>
 
//对齐支持
//C++11标准定义alignof来查看数据的对齐方式
//Microsoft定义为__alignof来查看数据的对齐方式
struct EmptyStruct{};
class EmptyClass{};
class EmptyClass1;
struct HowManyBytes
{
     char a;
     int b;
};
 
struct ColorVector1
{
     double r;
     double g;
     double b;
     double a;
};
 
//C++11标准提供修饰符alignas设定struct/class/union的对齐方式
//Microsoft使用_declspec(align(#))来设定struct/class/union对齐方式
struct _declspec(align(32)) ColorVector2    //直接将ColorVector设定在32字节的地址边界上,其起始地址必须是32的倍数
 //等价_declspec(align(32)) struct ColorVector
{
     double r;
     double g;
     double b;
     double a;
};
 
int main()
{
     std::cout << "sizeof(EmptyStruct): " << sizeof(EmptyStruct) << std::endl;     //1
     std::cout << "sizeof(EmptyClass): " << sizeof(EmptyClass) << std::endl;    //1
     std::cout << "__alignof(EmptyClass): " << __alignof(EmptyClass) << std::endl;    //1

     //error,类型不完整,编译失败
     //std::cout << "__alignof(EmptyClass1): " << __alignof(EmptyClass1) << std::endl;//1
 
     std::cout << "sizeof(char): " << sizeof(char) << std::endl;    //1
     std::cout << "sizeof(int): " << sizeof(int) << std::endl;    //4
     std::cout << "sizeof(HowManyBytes): " << sizeof(HowManyBytes) << std::endl;    //8
     std::cout << "offset of char a: " << offsetof(HowManyBytes, a) << std::endl;    //0
     std::cout << "offset of int b: " << offsetof(HowManyBytes, b) << std::endl;    //4
 
     std::cout << "__alignof(HowManyBytes): " << __alignof(HowManyBytes) << std::endl;    //4
     std::cout << "__alignof(ColorVector1): " << __alignof(ColorVector1) << std::endl;    //8
     std::cout << "__alignof(ColorVector2): " << __alignof(ColorVector2) << std::endl;    //32
     std::cout << "sizeof(ColorVector2): " << sizeof(ColorVector2) << std::endl;    //32
 
     std::cout << "in ColorVector1 offset of double r: " << offsetof(ColorVector1, r) << std::endl;//0
     std::cout << "in ColorVector1 offset of double g: " << offsetof(ColorVector1, g) << std::endl;    //8
     std::cout << "in ColorVector1 offset of double b: " << offsetof(ColorVector1, b) << std::endl;    //16
     std::cout << "in ColorVector1 offset of double a: " << offsetof(ColorVector1, a) << std::endl;    //24
     std::cout << std::endl;

     std::cout << "in ColorVector2 offset of double r: " << offsetof(ColorVector2, r) << std::endl;//0
     std::cout << "in ColorVector2 offset of double g: " << offsetof(ColorVector2, g) << std::endl;    //8
     std::cout << "in ColorVector2 offset of double b: " << offsetof(ColorVector2, b) << std::endl;    //16
     std::cout << "in ColorVector2 offset of double a: " << offsetof(ColorVector2, a) << std::endl;    //24
 
     int a;
     long long b;
     auto &c = b;
     char d[1024] = { 0 };

     //对内置类型
     std::cout << __alignof(int) << std::endl;    //4
 
     //对变量、引用或者数组
     std::cout << __alignof(a) << std::endl    //4
          << __alignof(b) << std::endl    //8
          << __alignof(c) << std::endl    //8  引用与其引用的数据对齐值相同
          << __alignof(d) << std::endl;    //1 数组的对齐值由其元素决定
     return 0;
}

====================打个广告,欢迎关注====================

QQ:412425870
csdn博客:
http://blog.youkuaiyun.com/caychen
码云:
https://gitee.com/caychen/
github:
https://github.com/caychen

点击群号或者扫描二维码即可加入QQ群:

328243383(1群)



点击群号或者扫描二维码即可加入QQ群:

180479701(2群)



C++11 特性 autodecltypenullptroverridefinalconstexprusingexplicitdefaultforfunctionlambdabindarrayshared_ptrweak_ptrunique_ptrthreadmutexlock_guardatomicT &&std::move万能引用 T && 阅读详情

相关推荐

第 18 章 C++ 关键特性速览

本章作为C++全卷收尾和后续索引,系统梳理了C++11/14/17/20/23各版本的重要特性。通过"使用频度×重要性"双维度评分体系(⭐⭐⭐⭐⭐至⭐),配合难度标识(🟢🟡🔴),帮助开发者快速掌握83项核心特性。重点包括C++11的智能指针、移动语义,C++17的结构化绑定、if constexpr,以及C++20的协程等。每项特性提供最小代码示例和详细学习指引(卷×章),并附特性依赖图和使用场景索引,为现代C++开发提供全景式学习路线图。

杨充 1314

关于sizeof(空struct和空class)

struct empty_struct { }empty_struct; struct empty_class { }empty_class; 问:sizeof(empty_struct)和sizeof(empty_class)的大小分别是多少?1. Windows平台下,VC6.0编译环境:空结构体C文件中无法编译通过;在CPP文件中,分别输出1、12.Linux下gcc编译 C文件中,sizeof(empty_struct) = 0C++文件中,sizeof(empty_struct) = 1

明月江の鱼 2374

EffectiveModernC++:使用C++17和C++18的新特性

作者:禅与计算机程序设计艺术 C++17、C++18是近些年才出现的两个版本,它们包含了众多优秀新特性,如统一的初始化语法、自动推导的类型声明、结构化绑定、继承的可视性限定、consteval函数、字符串字面值、新的控制流语句等。当然还有其他很多特性等着我们去发现。除了这些改进之外,C++还引入了一些反直觉的特性。比如,“空指针常量”(n

AI天才研究院 2196

C++ 11 新特性:内存对齐 alignof 和 alignas

C++11 中的内存对齐特性提供了直接控制数据对齐的能力,这对于优化程序性能、减少 CPU 访问内存的开销非常重要。通过合理使用alignof和alignas,开发者可以在需要时显著提升数据访问速度,尤其是在性能敏感的应用程序中。当然,也要注意合理选择对齐大小,避免不必要的内存浪费。

kelvin_yin的专栏 5234

c++内存对齐,#pragma pack()对齐方式

详细介绍了c++内存对齐的原因,内存是怎么对齐的

Stata:手动安装ivreghdfe包的完整指南与常见问题解决

本文提供了Stata中手动安装ivreghdfe包的完整指南,包括准备工作、详细安装步骤及常见问题解决方案。ivreghdfe作为处理高维固定效应模型的强大工具,依赖ftools、reghdfe和ivreg2三个核心组件,手动安装可避免版本冲突问题。文章还分享了进阶使用技巧,如并行计算加速和保存固定效应估计值,助力用户高效完成工具变量回归分析。

weixin_29251131的博客 929

C语言对齐特性

C11的对齐特性比用位填充字节更自然。在这种上下文中,对齐指的是如何安排对象在内存中的位置。例如,为了效率最大化,系统可能把一个double类型的值储存在4字节内存地址上,但却允许吧char储存在任意地址。 _Alignof运算符给出一个类型的对齐要求,在关键字后面的圆括号中写上类型名即可: size_t d_align = _Alignof(float); 假设d_align 的值是4,一是float类型对象的对齐要求是4.也就是说,4是储存该类型值相邻地址的字节数。一般,对齐值都应该是2的非负整数次幂

qq_43085982的博客 1140

大模型备案避坑指南:如何设计符合TC260标准的评估测试题集?

本文深入探讨了如何设计符合TC260标准的大模型评估测试题集,以顺利通过备案。文章从解构标准核心逻辑出发,详细阐述了题集设计的工程化流程、核心原则与常见误区,并提供了模拟真实对抗的高阶测试策略与度量分析方法,旨在帮助企业构建一套能真实反映模型安全水位、有效规避风险的评估体系。

kafka6courier的博客 663

C++11标准中的alignas

上篇文章中留下了两个问题,这里终于有了答案。 C++11标准中,对alignas的说明在这里,这里是中文版。 在文档中,并没有提到像网上其他资料说的那样,alignas的参数只能是8,16,32,64,128等,且最小是8。 经过上机测试,alignas的参数必须是 2 的幂,也就是说,最小可以是0。写入不是 2 的幂参数会报错。写入参数合法但是小于结构体自身对齐值时,alignas设置无效。 #include <iostream> using namespace std; #define f

stone322的博客 1511

【大模型微调】魔搭社区GPU进行LLaMA-Factory微调大模型自我认知

本教程介绍如何使用魔搭社区GPU资源和LLaMA-Factory工具进行大模型微调。主要内容包括环境配置、工具安装、模型训练和效果评估。通过LoRA算法进行自我认知微调,详细说明了从数据准备到模型导出的完整流程,并提供了参数调优和显存管理等实用技巧,帮助读者快速掌握大模型定制化训练方法。

LChuck的博客 2928

uni-app - 实现全屏自适应且不变形背景大图,设置一张图片占满全屏(根据手机或电脑尺寸自动拉伸背景图像),用于页面是一张平铺的大图做背景的情况,全端兼容

uni-app,vue.js,微信小程序-设置背景图自适应手机屏幕尺寸,页面中的背景图片高度和宽度自适应,UNI-APP里如何设置背景图自适应手机屏幕尺寸,如何实现一个图片铺满整个页面,并且可以根据用户机型进行自动修正,自适应背景大图片官方教程,一个页面如何将图像放到背景上,纯CSS实现,设置背景图片占满全屏,3种CSS实现背景图片全屏铺满自适应的方式,uni-app中如何让图片不带高度的自适应,兼容uni-app全端,支持【纯】微信小程序项目使用,uni-app-实现全屏自适应且不变形背景大图

🏆 前端领域优质创作者 1万+

c++ 常用新特性总结【c++11】,【c++14】,【c++17】,【c++20】

一文总结了c++常见的新特性,在c++推出的新特性中,c++11无疑是最具影响力的,其次是c++17与c++14。

Ray 6228

v86.01 鸿蒙内核源码分析 (静态分配篇) | 很简单的一位小朋友 | 百篇博客分析 OpenHarmony 源码

相比动态分配,静态内存池的分配就是个小弟弟,非常的简单,两个结构体 + 一张图 就能说明白。

日拱一卒,力出一孔 775

现代C++语言(C++11/14/17)特性总结和使用建议

C++语言在历史上经过了很多次的演进。最早的时候,C++语言没有模板、STL、异常等特性,之后加入这些特性形成大多数人所熟悉的C++98/03标准。在此之后,C++经过10多年又孕育出了拥有众多革命性变化的C++11标准(在标准正式发布前,被称为C++0x)。C++11包括了约140个新特性和约600个缺陷的修正。由于其变化实在太大,被很多人称为“现代C++语言”(Modern C++ Language),以和之前的经典C++语言作区分。在C++11后,标准委员会又发布了C++14和C++17标准,其内容大

bigchen 7086

AMBA-AXI and ACE协议详解(十)

本章介绍了ACE协议中的Barrier事务机制,包括内存屏障和同步屏障两种类型。

Crazzy_M的博客 614

组建高效AI开发团队:角色、技能与协作

在当今科技飞速发展的时代,人工智能(AI)已经成为各个领域的核心驱动力。组建高效的AI开发团队对于企业和科研机构来说至关重要,它能够推动创新、提高竞争力、实现业务目标。本文的目的在于为那些希望组建或优化AI开发团队的管理者、技术负责人以及相关从业者提供全面的指导。范围涵盖了团队角色的定义、所需技能的分析、团队协作的策略,以及实际项目中的应用和相关资源的推荐。本文将首先介绍AI开发团队的核心概念与联系,包括团队角色、技能和协作之间的关系。接着阐述核心算法原理和具体操作步骤,结合数学模型和公式进行详细讲解。

2502_91592937的博客 995

C++11——新特性超详细总结

18. 负浮点数:^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ 或 ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$17. 正浮点数:^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ 或 ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$

m0_65635427的博客 7636

【ComfyUI】Wan2.2 Rapid-AIO-Mega 二次元文生视频

通过 SD3 采样体系与 Wan 系列专用的 **WanVaceToVideo** 视频生成节点,整个流程从模型加载、文案编码、潜空间采样到视频合成一气呵成,能够稳定输出画面精致、角色统一、光影氛围鲜明的动态画面。这套工作流重点整合了视频长度、帧率、分辨率等核心参数控制,并结合 KSampler 的细节生成能力,旨在让用户能在 ComfyUI 中快速生成高质量的二次元叙事视频。

Mr数据杨 1985

C++11新特性总结

C++11引入了许多新特性,如auto关键字实现自动类型推导,nullptr代替NULL,智能指针如unique_ptr和shared_ptr更安全地管理内存,lambda表达式简化函数对象的书写,委托构造函数和默认删除函数增强了类的构造与析构控制,移动语义提高了效率,变长参数模板variadic templates支持可变数量的参数类型。这些特性大大提高了C++的易用性和性能,并使得代码更简洁、安全、高效。

白云之道 1328

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

【C++11、C++14、C++17、C++20新特性整理总结】

C++11、C++14、C++17、C++20新特性整理总结。提示:自用学习一下C++11、C++14、C++17、C++20新特性。

weixin_48629311的博客 5294

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

[C++11] 类中新特性的添加

关于C++11中类的新特性功能理解和使用的详细讲解。

kevin_blog 1033

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

c++ 11 14 17 20后的新特性总结(持续更新)

c++ 11 14 17 20后的新特性 c++11 1.auto auto 不能用于函数传参、auto 还不能用于推导数组类型 2.lambda:匿名函数、闭包(闭包就是能够读取其他函数内部变量的函数-定义在一个函数内部的函数) Lambda 表达式的基本语法如下: [捕获列表](参数列表) mutable(可选) 异常属性-> 返回类型{ // 函数体 } 3.右值引用 c++14 4.结构化绑定 5.std::thread 6.std::regex 7.concept 8.nullptr 取代

Garden的博客 9401

【cpp进阶】c++11的新特性(概述版)

C++11是C++历史上最重要的更新,它通过移动语义、智能指针、Lambda、自动类型推导等特性,让C++在保持C级性能的同时,获得了Rust/Python级的生产力,实现了语言的现代化重生。 这就是C++11的故事——一个关于性能、安全、生产力三者兼得的传奇。

2301_80127108的博客 1051

现代C++特性速查指南:从C++11到C++23的终极学习路线

现代C++特性速查指南(modern-cpp-features)是一个专注于整理C++11至C++23语言及标准库新特性的开源项目,为开发者提供清晰易懂的特性说明和实用示例,帮助快速掌握现代C++编程技巧。 ## 🚀 为什么要学习现代C++? C++作为一门不断进化的编程语言,从C++11开始引入了大量革命性特性,这些更新不仅让代码更简洁、更安全,还大幅提升了开发效率和程序性能。无论是职场新

gitblog_00854的博客 1035

C++11、C++14、C++17、C++20新特性代码示例

本文全面梳理了C++11到C++20各版本的核心新特性。C++11引入自动类型推导、智能指针、移动语义、并发支持等;C++14新增泛型Lambda、变量模板、constexpr扩展等;C++17提供结构化绑定、文件系统库、optional/variant等实用工具;C++20则带来模块、协程、概念约束等重大革新。每个特性均配有代码示例,涵盖语法改进、性能优化和现代编程范式,帮助开发者系统掌握现代C++的核心功能演进。

汪洋中的一条船 1086

C++11常用新特性汇总

  感谢博主的分享,转载自:http://www.cnblogs.com/feng-sc/p/5710724.html   C++11已经出来很久了,网上也早有很多优秀的C++11新特性的总结文章,在编写本博客之前,博主在工作和学习中学到的关于C++11方面的知识,也得益于很多其他网友的总结。本博客文章是在学习的基础上,加上博主在日常工作中的使用C++11的一些总结、经验和感悟,整理出来,分...

zhanglu_1024的博客 2万+
上一篇: C++11特性(17):lambda函数
下一篇: C++ STL(19):Sorted Range上的查找算法
caychen
博客等级 码龄9年 110粉丝 113原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值