内存对齐原则

struct

(1)结构体第一个数据成员放在offset为0的地方,后面每个成员相对于结构体首地址的偏移量(offset)都是成员大小(该变量类型所占字节)的整数倍,如有需要编译器会在成员之间加上填充字节(internal adding);

(2)如果一个结构里有某些结构体成员,则结构体成员要从其内部"最宽基本类型成员"的整数倍地址开始存储(struct a里存有struct b,b里有char 、int 、double等元素,那b应该从8的整数倍开始存储);

(3)结构体的总大小,也就是sizeof的结果,.必须是其内部最大成员的"最宽基本类型成员"的整数倍。

union

(1)联合体的大小为所有成员变量中所占字节数最大的;

(2)当联合体中有数组时,一方面要保证空间能够存储这个数组的大小,另一方面要保证最终的结果是最大数据类型的整数倍。

class

(1)按照结构体对齐原则;

(2)class含有成员变量和成员函数:计算大小的时候只与成员变量有关。

与成员函数和静态成员无关,即普通成员函数、静态成员函数、静态成员变量。对类的大小没有影响。

(3)虚函数对类的大小有影响,因为虚表指针的影响。在32位系统占4个字节,64位系统占8个字节。

(4)多个虚函数也只算一个的影响。

内存对齐的主要作用

(1) 性能原因:数据结构(尤其是栈)应该尽可能地在自然边界上对齐。

原因在于,为了访问未对齐的内存,处理器需要作两次内存访问;而对齐的内存访问仅需要一次访问。经过内存对齐后,CPU的内存访问速度提升。

(2) 平台原因:不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常。

(3) 空间原因:没有进行内存对齐的结构体或类会浪费一定的空间,当创建对象越多时,消耗的空间越多。

基本变量类型所占大小

取消内存对齐

#pragma pack (n)

__attribute__((packed))

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

非煤矿山电子封条系统算法方案 opencv

非煤矿山电子封条系统算法部署方案是基于pythonopencv网络模型Ai视频图像识别技术,非煤矿山电子封条系统算法部署方案对出入井人员、人员变化及非煤矿山生产作业状态等状况,及时发现处理异常动态将自动发出警报。OpenCV的全称是Open Source Computer Vis…

研报精选230528

目录 【行业230528华金证券】传媒行业深度研究:AIGC最新应用与场景研究 【行业230528国海证券】电动船舶行业深度报告:绿色智能大势已至,驶向电化百亿蓝海 【行业230528华西证券】纺织服装行业周报:5月增长放缓无碍中长期出清逻辑…

Vue.js 中的过滤器和计算属性

Vue.js 中的过滤器和计算属性 Vue.js 是一款流行的 JavaScript 框架,它提供了一种简单而灵活的方式来构建交互式 Web 应用程序。在 Vue.js 中,过滤器和计算属性是两个常用的概念。它们可以帮助开发者更方便地处理数据,提高代码的可读性和可维…

【Linux】进程状态与进程优先级

目录 一、什么是进程二、进程状态1、Linux下的进程状态2、两个特殊进程1、僵尸进程2、孤儿进程 三、进程优先级 一、什么是进程 进程就是程序的一个执行实例,也就是正在执行的程序,然后由操作系统帮助我们将程序转化为进程,完成特定的任务。…

山区特殊场景的倾斜摄影三维模型数据出现几何坐标偏差原因,如何修正这些坐标偏差?

山区特殊场景的倾斜摄影三维模型数据出现几何坐标偏差原因,如何修正这些坐标偏差? 山区倾斜摄影三维模型数据出现几何坐标偏差的原因可能有很多,其中一些常见的原因包括不同地图投影系统之间的转换问题、GPS定位误差、测量设备精度问题、摄影…

AI+边缘,是如何加速制造转型的?

在现代工业中,提起智慧工厂、智能制造有一个经久不衰的话题,那便是IT和OT的融合。 IT(Information Technology)部门专注于处理数据,整个业务系统需要它来维持运营。而OT(Operation Technology)…

实战Windows Chrome 0day

遇到挑战跟挫折的时侯,我有一个坚定的信念,我可以断气,但绝不能放弃 漏洞复现 实战Windows Chrome 0day需要满足的条件 第一点是关闭沙箱环境 第一种方式 设置Chrome浏览器的快捷方式 在快捷方式上增加 -no-sandbox 第二种方式 命令行命令…

Studio One6简体中文版全新版本功能详解

Studio One 6是一款强大的音乐编曲软件,可以帮助您使用灵活的和弦轨道功能实现音乐创作。通过新的智能模板、直观的拖放工作流、可定制的用户界面和强大的集成工具,使创建快速而轻松。 无论你选择 Studio One 哪个版本,你都可以得到无限的音轨、通道和插…

微信小程序原生开发功能合集十八:系统主题及自定义主题功能实现

本章实现系统主题监听及相应处理,包括暗黑色、亮色等。并实现自定义主题控制相关功能,可通过菜单进行主题的切换。   另外还提供小程序开发基础知识讲解课程,包括小程序开发基础知识、组件封装、常用接口组件使用及常用功能实现等内容,具体如下:    1. CSDN课程: ht…

SpringBoot+Vue 的简历招聘系统

文章目录 1、效果演示2、 前言介绍3、主要技术4 **系统设计**4.1 系统体系结构4.2开发流程设计4.3 数据库设计原则4.4 数据表 5 **系统详细设计**5.1管理员功能模块5.2用户功能模块5.3前台首页功能模块 6、源码获取 1、效果演示 2、 前言介绍 随着科学技术的飞速发展&#xff…

Three.js--》实现3d圣诞贺卡展示模型

目录 项目搭建 初始化three.js基础代码 加载环境模型 设置环境纹理 添加水面并设置阴影效果 实现幽灵小球的运动 实现相机切换和文字切屏 实现漫天星星和爱心样式 今天简单实现一个three.js的小Demo,加强自己对three知识的掌握与学习,只有在项目…

笔试强训8

作者:爱塔居 专栏:笔试强训 作者简介:大三学生,希望和大家一起进步 day13 一. 单选 1.下列关于视图的说法错误的是: A 视图是从一个或多个基本表导出的表,它是虚表B 视图一经定义就可以和基本表一样被查询…

SSM 如何使用 Redis 实现缓存?

SSM 如何使用 Redis 实现缓存? Redis 是一个高性能的非关系型数据库,它支持多种数据结构和多种操作,可以用于缓存、队列、计数器等场景。在 SSM(Spring Spring MVC MyBatis)开发中,Redis 可以用来实现数…

皮卡丘CSRF

1.CSRF(get) 首先看提示,我们选择用户kobe,密码123456登录 点击修改个人信息,假如用户要把住址改为shanxi 再点击submit,同时用bp抓包,我们可以看到是get请求,数据包含在URL之中 将…

NCI架构-1

1、NFCC和DH通过物理连线相连,物理连线对应为Transport Layer(传输层),支持SPI、I2C、UART、USB等; 2、DH中所有和NFC相关的应用程序都可视为DH-NFCEE(EE:Execution Enviroment),图左的NFCEE模块可运行一些…

Jetson nano之ROS入门 - - 机器人建模与仿真

文章目录 前言一、URDF建模1. URDF语法详解a. robotb. linkc. joint 2. URDF机器人建模实操 二、Xacro宏优化1、 Xacro宏语法详解2、 Xacro建模实操 三、Rviz与Gazebo仿真1、Gazebo集成URDF建模语法基础2、Gazebo集成URDF实操 总结 前言 在ROS中,机器人建模和仿真是…

Android AIDL Callback的使用(配源码)

零、示例说明 本示例,完成的功能是:客户端向服务端注册一个回调,服务端是一个商店shop,当商店里的产品 Product 有变化时,调用回调向通知客户端,什么商品更新了。 一、完整源代码 完整源码链接: https:/…

solr快速上手:配置从mysql同步数据(五)

0. 引言 上一节我们已经配置了新的索引,但是数据还是手动添加的,并没有实现自动从数据库同步,所以这一节,继续来实现从mysql同步数据到solr solr快速上手:solr简介及安装(一) solr快速上手&a…

[java安全]反射

文章目录 [java安全]反射定义反射的运用1、反射获取类对象1.1、Class.forName()1.2、Object.class1.3、obj.getClass() 2、反射获取成员方法2.1、getMethods()2.2、getDeclaredMethods()2.3、getMethod()2.4、getDeclaredMethod() 3、反射获取构造方法4、反射创建对象4.1、通过…

自动化测试selenium环境搭建

自动化测试工具selenium搭建 1. 自动化和selenium基本概念 1) 什么是自动化?为什么要做自动化? 自动化测试能够代替一部分的手工测试,自动化测试能够提高测试的效率。随着项目功能的增加,版本越来越多,版本的回归测试的压力也…