Linux内核之aligned用法实例(四十七)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!

优质专栏:Audio工程师进阶系列原创干货持续更新中……】🚀
优质专栏:多媒体系统工程师系列原创干货持续更新中……】🚀
优质视频课程:AAOS车载系统+AOSP14系统攻城狮入门实战课原创干货持续更新中……】🚀

人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.

更多原创,欢迎关注:Android系统攻城狮

欢迎关注Android系统攻城狮

🍉🍉🍉文章目录🍉🍉🍉

    • 🌻1.前言
    • 🌻2.C语言之aligned关键字介绍
    • 🌻3.代码实例
      • 🐓3.1 单个变量的对齐
      • 🐓3.2 结构体的对齐
      • 🐓3.3 指定类型对齐

🌻1.前言

本篇目的:Linux内核之aligned用法实例

🌻2.C语言之aligned关键字介绍

  • 在Linux内核中,aligned关键字是一个编译器指令,它用于指定变量或结构体的对齐方式。对齐是指变量或结构体在内存中的起始地址与某个数的倍数对齐。对齐对于性能至关重要,特别是在处理对齐敏感的数据类型(如浮点数)或使用SIMD指令时。正确的对齐可以减少内存访问时间,提高程序的性能。
  • 在Linux内核中,aligned关键字通常与__attribute__((aligned(n)))一起使用,其中n是一个整数,指定了对齐边界。n必须是2的幂,因为大多数处理器和内存系统都对齐到2的幂边界上的地址。
  • aligned关键字的使用方法如下:
    1. 用于单个变量:可以将aligned关键字用于单个变量,以指定其对齐方式。例如:
int var __attribute__((aligned(16))) = 42;
  • 在这个例子中,变量var的起始地址将与16的倍数对齐。这意味着,无论var在内存中的位置如何,它的地址都将是一个16的倍数。
    1. 用于结构体:可以将aligned关键字用于结构体,以指定其成员的对齐方式。例如:
struct example {int a;float b;
} __attribute__((aligned(32)));
  • 在这个例子中,结构体example的起始地址将与32的倍数对齐。这意味着,无论example在内存中的位置如何,它的地址都将是一个32的倍数。
    1. 用于数组和指针:可以将aligned关键字用于数组和指针,以指定它们的对齐方式。例如:
int arr[10] __attribute__((aligned(64)));
int *ptr __attribute__((aligned(128)));
  • 在这个例子中,数组arr的起始地址将与64的倍数对齐,指针ptr的起始地址将与128的倍数对齐。
  • 需要注意的是,使用aligned关键字指定的对齐方式可能会增加内存消耗。在上面的例子中,虽然我们只需要一个整数变量,但是由于对齐到16字节边界,编译器可能会在变量前后添加额外的填充字节,以确保对齐。因此,在使用aligned关键字时,需要权衡内存消耗和性能优化。
  • aligned关键字在Linux内核中用于指定变量、结构体或数组的对齐方式。它可以优化内存访问速度,特别是在处理对齐敏感的数据类型时。但需要注意的是,使用aligned关键字可能会增加内存消耗。在实际应用中,应根据具体需求和对齐要求进行权衡。

🌻3.代码实例

🐓3.1 单个变量的对齐

#include <stdio.h>int main() {int var __attribute__((aligned(16))) = 42;printf("Address of var: %p\n", (void*)&var);return 0;
}
  • 变量 a 被指定为对齐到16字节边界。
  • 问题一:为什么按16字节对齐,但是打印时sizeof(var) = 4?
  • 虽然 a 指定为在内存中以 16 字节边界对齐,但其大小仍然是基本类型 int 的大小,通常情况下是4字节(在大多数平台上)。
  • 这意味着虽然变量 a 在内存中可能按照16字节边界对齐,但它仍然只占用4个字节的空间。

🐓3.2 结构体的对齐

#include <stdio.h>int main() {// 使用 aligned(16) 将变量 a 对齐到 16 字节边界int a __attribute__((aligned(16))) = 10;printf("Size of a: %lu\n", sizeof(a));printf("Address of a: %p\n", (void *)&a);return 0;
}
  • AlignedStruct 结构体被指定为对齐到32字节边界

🐓3.3 指定类型对齐

#include <stdio.h>typedef int aligned_int __attribute__((aligned(8)));int main() {aligned_int num = 5;printf("Size of num: %lu\n", sizeof(num));printf("Address of num: %p\n", (void *)&num);return 0;
}
  • aligned_int 类型被定义为对齐到8字节边界的整型。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/821592.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序生成链接或二维码的对比

二维码 1.小程序样式码 获取参数直接options.xxx&#xff08;参数名&#xff09; 方法&#xff1a;微信公众平台 》工具》生成小程序二维码&#xff1b; 样式图&#xff1a;就一看就是小程序的二维码&#xff1b; 2.正方形二维码/链接 方法&#xff1a;微信公众平台》开…

5-pytorch-torch.nn.Sequential()快速搭建神经网络

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言torch.nn.Sequential()快速搭建网络法1 生成数据2 快速搭建网络3 训练、输出结果 总结 前言 本文内容还是基于4-pytorch前馈网络简单&#xff08;分类&#xf…

Go 编译构建的一些细节

Go 编译构建的一些细节 发现自己竟然没有怎么认真研究过 go 的编译构建命令。 结论前置 go run 专门用来运行命令源码文件的命令&#xff0c;一般用来运行单个文件go build 主要是用于测试编译。编译某个包或者项目&#xff0c;在当前目录下生成可执行文件go install 编译并…

RabbitMQ - Spring boot 整合 RabbitMQ

一、RabbitMQ 1、RabbitMQ 使用场景 1.1、服务解耦 假设有这样一个场景, 服务A产生数据, 而服务B,C,D需要这些数据, 那么我们可以在A服务中直接调用B,C,D服务,把数据传递到下游服务即可 但是,随着我们的应用规模不断扩大,会有更多的服务需要A的数据,如果有几十甚至几百个下…

【CANN训练营】目标检测(YoloV5s)实践(Python实现)

样例介绍 使用多路离线视频流&#xff08;* .mp4&#xff09;作为应用程序的输入&#xff0c;基于YoloV5s模型对输入视频中的物体做实时检测&#xff0c;将推理结果信息使用imshow方式显示。 样例代码逻辑如下所示&#xff1a; 环境信息 CPU&#xff1a;Intel Xeon Gold 63…

C++11新特性系列(一)

目录 1、C11简介 2、列表的初始化 2.1 {}初始化 2.2 initializer_list 3、auto与decltype 3.1 auto 3.2 decltype 4、范围for循环 5、右值引用和移动语义 4.1 左值引用和右值引用 4.1.1 左值引用 4.1.2 右值引用 4.2 右值引用使用场景和意义 1、C11简介 C11是C语言…

高通 Android 12 源码编译aidl接口

最近在封装系统sdk接口 于是每次需要更新aidl接口 &#xff0c;传统方式一般使用make update-api或者修改Android.mk文件&#xff0c;今天我尝试使用Android.bp修改 &#xff0c;Android 10之前在Android.mk文件修改&#xff0c;这里不做赘述。下面开始尝试修改&#xff0c;其实…

InnoDB架构:磁盘篇

InnoDB架构&#xff1a;磁盘篇 InnoDB是MySQL数据库中默认的存储引擎&#xff0c;它为数据库提供了事务安全型&#xff08;ACID兼容&#xff09;、行级锁定和外键支持等功能。InnoDB的架构设计优化了对于读取密集和写入密集型应用的性能表现&#xff0c;是一个高度优化的存储系…

近屿智能全新推出AI培训产品:AIGC大模型工程师与产品经理学习路径图

如今&#xff0c;人工智能和自然语言处理技术的发展&#xff0c;使得AI生成的内容&#xff08;AIGC&#xff0c;AI Generated Content&#xff09;领域开发出了巨大的潜力。就像业内巨头OpenAI公司&#xff0c;开发出了一系列自然语言处理模型ChatGPT&#xff0c;不仅带动了全世…

C语言单向链表的经典算法

1.分割链表 2.移除链表元素 3.反转链表 4.合并两个有序链表 5.链表的中间结点 6.环形链表的约瑟夫问题 1.分割链表: 1.思路&#xff1a;创建新链表&#xff0c;小链表和大链表。如图 代码如下 /*** Definition for singly-linked list.* struct ListNode {* int val…

Unity类银河恶魔城学习记录12-18,19 p140 Options UI-p141 Finalising ToolTip源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili UI_ToolTip.cs using TMPro; using UnityEngine;public class UI_ToolTip :…

IBM SPSS Statistics for Mac中文激活版:强大的数据分析工具

IBM SPSS Statistics for Mac是一款功能强大的数据分析工具&#xff0c;为Mac用户提供了高效、精准的数据分析体验。 IBM SPSS Statistics for Mac中文激活版下载 该软件拥有丰富的统计分析功能&#xff0c;无论是描述性统计、推论性统计&#xff0c;还是高级的多元统计分析&am…

【面试经典 150 | 链表】K 个一组翻转链表

文章目录 写在前面Tag题目来源解题思路方法一&#xff1a;迭代 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢迎催更…… 专栏内容以分析题目为主&#xff0c;并附带一些对于本题涉及到的数据结构等内容进行回顾…

【从零开始手搓12306项目】第一阶段遇到的问题及解决方案

IDEA中datebase连接mysql失败 读取外包函数报错 注意区分private和public 找不到数据库&#xff1f; 一定要注意数据库的url链接&#xff0c;在datebase的url复制过来 xml和java对应不上&#xff1f; 最好复制一遍到xml文件 git忽略条件文件目录 定义Git全局的 .gitigno…

人工智能与IP代理池:解析网络数据采集的未来

前言 随着互联网的快速发展&#xff0c;数据成为了当今社会最宝贵的资源之一。然而&#xff0c;要获取大量的网络数据并进行有效的分析&#xff0c;往往需要面对诸多挑战&#xff0c;其中之一就是网络封锁与反爬虫机制。在这个背景下&#xff0c;人工智能&#xff08;AI&#x…

Python 物联网入门指南(七)

原文&#xff1a;zh.annas-archive.org/md5/4fe4273add75ed738e70f3d05e428b06 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 第二十四章&#xff1a;基本开关 到目前为止一定是一段史诗般的旅程&#xff01;回想一下你开始阅读这本书的时候&#xff0c;你是否曾想象…

IP协议如何进行地址管理?

如今&#xff0c;IP协议有两个版本&#xff0c;分别是IPv4和IPv6&#xff0c;IPv4是目前主要应用的版本。IPv4的IP地址是以4个字节的数字来表示的&#xff0c;比如 127.0.0.1。因此&#xff0c;IPv4所能表示IP地址的个数是2^32次方&#xff0c;也就是42亿多个&#xff0c;看起来…

OpenStack 入门体验

目录 一、云计算概述 1.1、什么是云计算 1.2、云计算的服务模型 1&#xff09;IaaS 2&#xff09;PaaS 3&#xff09;SaaS 1.3、OpenStack 概述 1&#xff09;OpenStack 起源 2&#xff09;什么是 OpenStack 3&#xff09;OpenStack 优势 二、OpenStack 一…

RabbitMQ进阶学习

在之前的练习作业中&#xff0c;我们改造了余额支付功能&#xff0c;在支付成功后利用RabbitMQ通知交易服务&#xff0c;更新业务订单状态为已支付。 但是大家思考一下&#xff0c;如果这里MQ通知失败&#xff0c;支付服务中支付流水显示支付成功&#xff0c;而交易服务中的订…

IAM 统一身份认证与访问管理服务

即统一身份认证与访问管理服务&#xff0c;是云服务商提供的一套云上身份管理解决方案&#xff0c;可帮助企业安全地管理云上资源的访问权限。 在当今云计算时代&#xff0c;企业越来越依赖云服务来存储和处理敏感数据。然而&#xff0c;这也带来了新的安全挑战&#xff0c;即…