aligned内存对齐

aligned内存对齐attribute aligned n 内存对齐使用环境 Linuxversion 15 0 29 generic buildd lgw01 amd64 057 gccversion7 3 0 Ubuntu7 3 0 16ubuntu3 关于设置内存对齐方式上有两种方式 attribute aligned n 编译器按照 n 个字节对齐 pragmapack n 编译器将按照 n 个字节对齐 pragmapack 取消指定对齐 恢复缺省对齐

__attribute__((aligned(n)))内存对齐

使用环境Linux version 4.15.0-29-generic (buildd@lgw01-amd64-057) (gcc version 7.3.0 (Ubuntu 7.3.0-16ubuntu3))

关于设置内存对齐方式上有两种方式:

  1. __attribute__((aligned(n)))编译器按照n个字节对齐
  2. #pragma pack(n) 编译器将按照n个字节对齐;#pragma pack () 取消指定对齐,恢复缺省对齐

方式一__attribute__((aligned(n)))

  1. 一开始去网上找关于它的对齐规则,找到一个十几万阅读,200多收藏的帖子学习,按照设置方式进行测试,发现根本就是错误的(也可能环境不同?这明明是跟编译器有关呀),下面我将用直观的代码形式演示它的正确设置方式!
  2. 运行结果:
    #include  
           using namespace std; /* 按照结构体中最大成员类型的字节对齐,最大数据类型是int类型,4个字节 */ struct Test1 { 
          int a; char b; int c; }; /* 【按照aligned(n)中的n】与【结构体中最大数据类型字节数】中的最大值对齐 */ struct Test2 { 
          int a; char b; int c; }__attribute__((aligned(8))); /* 如果aligned(n)中的n填小于结构体中最大数据类型的值, 那么程序员设置的自定义对齐方式是不会生效的 */ /* 按照一个字节对齐 */ struct Test3 { 
          int a; char b; int c; }__attribute__((packed)); // 不等同于__attribute__((aligned(1))); int main() { 
          cout << "sizeof(Test1) = " << sizeof(Test1) << endl; cout << "sizeof(Test2) = " << sizeof(Test2) << endl; cout << "sizeof(Test3) = " << sizeof(Test3) << endl; return 0; } 
    sizeof(Test1) = 12 sizeof(Test2) = 16 sizeof(Test3) = 9 

方式二:#pragma pack(n)

  1. #include  
           using namespace std; /* 设置内存对齐方式按照1个字节对齐, 如果pack(n)中的n大于结构体中 最大数据类型的值,那么设置会失效,编译器只会按照两者中的最小的那个值对齐, 与aligned(n)正好是相反的 */ #pragma pack(1)  struct Test1 { 
          int a; char b; int c; }; /* 恢复默认对齐方式 */ #pragma pack() struct Test2 { 
          int a; char b; int c; }; /* 此时pack(n)中的n大于int的长度,所以会设置失败,编译器 还是会按照四个字节对齐 */ #pragma pack(8) struct Test3 { 
          int a; char b; int c; }; int main() { 
          cout << "sizeof(Test1) = " << sizeof(Test1) << endl; cout << "sizeof(Test2) = " << sizeof(Test2) << endl; cout << "sizeof(Test3) = " << sizeof(Test3) << endl; return 0; } 
  2. 运行结果
    sizeof(Test1) = 9 sizeof(Test2) = 12 sizeof(Test3) = 12 

这就是两种对齐方式的简单介绍

本人能力有限,如有错误,望不吝指正;原创不易,欢迎转载,转载请注明出处

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/224768.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 上午11:11
下一篇 2026年3月17日 上午11:11


相关推荐

  • 高分1(GF1)、高分2(GF2)卫星数据大气校正[通俗易懂]

    高分1(GF1)、高分2(GF2)卫星数据大气校正[通俗易懂]KEYWORDS:GF1,GF2,RSD,大气校正,遥感软件0.RSD大气校正RSD是李国春教授团队开发的一款遥感数处理软件。其大气校正模块是参照USGSLaSRC大气校正流程,使用VC++重新改写并在Windows平台实现的内置大气校正功能。1.原理与方法RSD大气校正是应用6SV大气辐射模型原理实现的RSD遥感平台内置软件功能。其对Landsat8OLI大气校正部分延续了LaSRC的校…

    2022年10月9日
    3
  • 如何把Eclipse改成中文版

    如何把Eclipse改成中文版一 打开浏览器 输入 http www eclipse org babel downloads php 如图所示 BabelLanguag 开头的一栏下面就是各个 eclise 版本的语言包 此处以 Indigo 版为例 二 目标锁定 BabelLanguag 行 将下面对应的网址复制到剪贴板 三 打开 eclipse 依次选择菜

    2026年3月19日
    2
  • Kinect获取深度图和深度数据

    Kinect获取深度图和深度数据做关于深度信息处理的,正好实验室配备了kinect2代,就想着先用kinect获取深度信息来处理,之后换其他设备只要有深度信息就直接往后推进就行,不过网上教程虽然多,但是第一次总会栽进坑中,记录一波,下回重来的时候长个教训。配置,参考https://blog.csdn.net/qq_37059483/article/details/77855398#commentsedit因为现在很多版本…

    2022年5月16日
    38
  • Marsaglia XORshift随机数算法「建议收藏」

    Marsaglia XORshift随机数算法「建议收藏」引理:二进制矩阵相乘中加法为异或。给定非空向量beta和n阶矩阵T,序列beta*T,beta*T^2,beta*T^3,…的秩为2^n-1的充要条件是矩阵T为非奇异矩阵.L是左移位操作,y=y^(y>b)表示为y=y*(E+R^b),令T=(E+L^a)(E+R^b),n=32或64,找不到这样的非奇异矩阵。但是令T=(E+L^a)*(E+R^b)*(E+L^c)能找

    2022年7月26日
    11
  • 清博舆情系统_什么是舆情

    清博舆情系统_什么是舆情1. 引言1.1 编写目的  编写此文档的目的是确认微博舆情分析系统的基本架构,指导系统的基本架构。1.2 项目信息项目名称:舆情分析系统项目提出者:指导教师开发者:东北大学软件学院大数据班T09实训项目组(lzf、lcx)用户:舆情分析员、系统管理员1.3 项目背景  互联网的飞速发展促进了很多新媒体的发展,不论是知名的大V,明星还是围观群众都可以通过手机在微博,朋友圈或者点评网站上发表状态,分享自己的所见所想,使得“人人都有了麦克风”。不论是热点新闻还是娱乐八卦,传播速度远超我们

    2026年1月30日
    5
  • Hessian矩阵正定与函数凹凸性的关系

    Hessian矩阵正定与函数凹凸性的关系当然 通过主元变换或直接求出行列式的值也是方法之一 但由于缺乏充分性 即行列式小于零一定非正定 但大于零则不一定正定 因为偶数次的负元素相乘依旧得正 因此用所有主元 对角线 上的元素来判断的方法更为完备 因此 在诸如牛顿法等梯度方法中 使用黑塞矩阵的正定性可以非常便捷的判断函数是否有凸性 也就是是否可收敛到局部 全局的最优解 正定 半正定矩阵的直觉代表一个向量经过它的变化后的向量与其本身的夹角小于等于 90 度 Hessian 矩阵的正定性在判断优化算法可行性时非常有用 简单地说 黑塞矩阵正定 则

    2026年3月26日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号