01内存对齐之结构体偏移量

2023-11-01

01内存对齐之结构体偏移量

前提概念
结构体偏移量:所谓偏移量,就是我们每个结构体成员的首地址而已。

1 求结构体成员偏移量的两中办法
1)简单求结构体成员偏移量 。
// 注意:求偏移量时,必须将地址转成int整数才能求偏移量,不能直接地址相减,否则会默认先转成int型,4字节对应1个int。

typedef struct TEACHER {
	char name[4];
	int  age;
	int  id;
}Teacher;
int main(){
	Teacher t1;
	Teacher *p = &t1;
	int size1 = (int)(&p->age) - (int)p;   // &(p->age)表示取存放age值的首地址 
	printf("%d\n", size1);
	
	return 0;
}

2)绝对零地址法求。

// 每个结构体内部均有一个绝对零地址即结构体首地址(这里指p) 写法为"(类型 *)0"
	int size2 = (int)&(((Teacher*)0)->age);
	printf("%d\n", size2);

2 完整代码测试与结果分析
1)测试

#include<stdio.h>

typedef struct TEACHER {
	char name[4];
	int  age;
	int  id;
}Teacher;

void test01() {
	
	Teacher t1;
	Teacher *p = &t1;

	printf("%x\n", &p->age);
	printf("%x\n", p);

	// 两种错误求法测试
	printf("%x\n", (&p->age - p));  // 地址相减后会默认转成int 0xc - 0x8=4字节,刚好对应1个int. 所以再以%x输出实际已经是1了
	int size = (int)(&p->age - p);
	printf("%d\n", size);

	// 正确求法测试
	int n1 = (int)(&p->age);
	printf("%d\n", n1);
	int n2 = (int)(p);
	printf("%d\n", n2);


	// 1 简单求结构体成员偏移量            // 注意:必须转成int整数才能求偏移量,不能直接地址相减,否则会默认先转成int型 4字节对应1个int
	int size1 = (int)(&p->age) - (int)p;   // &(p->age)表示取存放age值的首地址 
	printf("%d\n", size1);

	// 2 绝对零地址法求
	// 每个结构体内部均有一个绝对零地址即结构体首地址(这里指p) 写法为"(类型 *)0"
	int size2 = (int)&(((Teacher*)0)->age);
	printf("%d\n", size2);
}

int main() {
	test01();
	// 总结:结构体内部偏移量以0开始。

	return 0;
}

2)结果分析
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

01内存对齐之结构体偏移量 的相关文章

  • IDE/mingw下动态库(.dll和.a文件)的生成和部署使用(对比MSVC下.dll和.lib)

    文章目录 概述 问题的产生 基于mingw的DLL动态库 基于mingw的EXE可执行程序 Makefile文件中使用Qt库的 a文件 mingw下的 a 文件 和 dll 到底谁起作用 小插曲 mingw 生成的 a文件到底是什么 为啥m
  • jquery easyui combobox加载数量过多引起渲染页面缓慢问题

    有些时候 当我们用easyui combobox控件加载页面数据的时候 由于数据量过多 几千几万 而且如果操作频繁的话 进而会引起需要加载半天才能去打开下拉面板 还有可能卡死 其实这种问题主要时间浪费在了渲染下拉面板上面 作者在遇到这种问题
  • linux内核-网络

    网络栈 linux内核网络协议栈架构分析 全流程分析 干货 舞起勿忘的博客 CSDN博客 内核协议栈 https blog csdn net yming0221 column info linux kernel net netfilter的

随机推荐

  • Scala作业(9)---模式匹配&&&高阶函数

    模式匹配 1 利用模式匹配 编写一个swap函数 接受一个整数的对偶 返回对偶的两个组成部件互换位置的新对偶 下面是使用模式匹配编写的 swap 函数 接受一个整数的对偶 返回对偶的两个组成部分互换位置的新对偶 def swap pair
  • 【零基础 快速学Java】韩顺平 p156-170 数组、3种初始化、赋值机制

    数组 数组可以存放多个同一类型的数据 数组也是一种数据类型 是引用类型 即 数组就是一组数据 使用方法 使用方式1 动态初始化 使用方式2 动态初始化 使用方式3 静态初始化 注意事项 数组赋值机制 值传递 VS 引用传递 jvm的内存 栈
  • Redis第二十九讲 Redis集群发布订阅模式以及Redis集群事务

    Redis集群状态下的发布订阅 在Redis的几个基本数据结构介绍中 有讲过List数据结构 可以使用List的阻塞特性实现订阅消费 关于Redis的底层数据结构可以参考我的这篇博客 Redis第六讲 Redis之List底层数据结构实现
  • vue中使用vconsole

    Vue中使用vconsole npm install vconsole 新建 vconsole js 文件 在文件中写入 import Vconsole from vconsole const vConsole new Vconsole e
  • ToList()所带来的性能影响

    原文 ToList 所带来的性能影响 前几天优化师弟写的代码 有一个地方给我留下很深刻的印象 就是我发现他总是将PLINQ的结果ToList lt gt 然后再返回给主程序 对于这一点我十分不解 于是去问他是什么原因 得到的答案很幽默 因为
  • sequence_item、sequence、sequencer、driver的关系

    框图 简单描述 driver sequencer sequence sequence item 细节理解 最初的验证平台只需要driver即可为什么还需要sequence机制 sequence机制的内部协议 sequence还有很多细节需要
  • 虚拟远程桌面

    微型服务器 太难理解了 我会为你简化它 考虑一个供应商部署的服务器机器来托管其众多客户的网站 为了在这台机器上设计 VPS 提供商会将其划分为多个分区并在虚拟级别上隔离它们 虚拟服务器 如果考虑性能 VPS 显然不如其父服务器 但是 就功能
  • LCD段码显示屏常见故障问题总结

    1 液晶屏有内污 一般现象为黑点 污点 纤维 指LCD内有纤维 2 液晶屏有内刮 一般现象为黑线 白线 PI被刮伤表现为线条刮伤 3 液晶显示颜色不均 一般现象为色彩不一致 彩虹 即LCD的色彩不均匀 在中间彩虹或杠边彩虹以及彩色条纹不均
  • C++之继承

    1 类与类之间的关系有哪些 与类之间的关系分为纵向和横向两种 纵向就是继承 横向包括 依赖 关联 聚合和组合 这里不进行解释 详解链接 https blog csdn net u014694510 article details 88316
  • 关于卷积和其偏置的详细动态图

    动态图 每走一步 得到的图片的值为a b c bias 其中a为卷积核在第一个信道上卷积的值 b为卷积和在第二个信道上卷积的值 c为卷积核在第三个信道上卷积的值 将他们加起来再加上偏置 而在TensorFlow中为什么用conv1 bias
  • Vue基础

    前期回顾 字符串 vue可能会用到的内容 indexOf lastIndexOf 查询字符串下标 找不到返回 1 split 分割为数组 slice start end 切割字符串 subString start end 截取字符串 按下标
  • 360移动安全岗位实习生笔试和面试之旅

    之前抱着试一试的心态投了360的安全岗位 个人觉得移动安全在未来会有很大的需求量 并且人才比较少 安全圈子本来就很小 安全技术本来价值就很高 所以很多大公司以及真正的黑客很少分享一些安全方面的技术 这些感受是我作为一个脚本小子半年来的感触
  • 为什么http请求会缓存?显示from disk cache?

    请求一个接口 发现status code 200 但是居然是否 from disk cache 接口也会缓存吗 请问是什么原因 问题描述 请求接口 发现拿的还是旧数据 排查了一天 后面和前端发现请求接口只花了1ms 然后发现接口状态为 20
  • Dynamics CRM 2016 常用基础操作

    来源 https blog csdn net jxian2009 article details 22179447 http www cnblogs com allenhua archive 2012 12 25 2832473 html
  • Unity 通过代码为一个物体添加多个材质球materials

    Unity 通过代码为一个物体添加多个材质球materials Unity的MeshRenderer提供了Materials数组 支持同时挂多种材质 这样做的目的是 为含有Mesh对象的多个SubMesh使用不同的材质 渲染不同的效果 需要
  • 【acadres.dll文件丢失怎么办】acadres.dll文件丢失的解决办法

    acadres dll文件丢失怎么办 acadres dll是一个windows系统中必备的dll文件 该类型文件的全称为Dynamic Link Library 意思就是动态链接库 不过各位小伙伴不必在意 我们只需要知道它是一个电脑中非常
  • python三维曲面图投影_matplotlib:在2dp上投影三维曲面

    有与 Axes3 相当的吗DSubplot plot 表面 在2D里 我试图在matplotlib中绘制网格在XY平面上的投影 因此不是在 3d 模式下 在import numpy as np import matplotlib pyplo
  • 计算机考研专业课考c语言的大学,【择校必看】十三所计算机专业课只考数据结构的985院校!...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 敲黑板 本文涉及到的学校计算机专业考研只考数据结构 其中部分院校同时也会考算法 C语言等相关内容 但是 相对其他几门 无疑在专业课的复习上大大降低了难度 如果各位同学目前的专业课复习并不理想 也
  • 微信小程序-解决scroll-view抖动

    微信小程序scroll view抖动 原因 产品需要点击换一换 列表置顶并刷新 所以需要动态绑定scroll view里面的scrollTop属性 scrollTop属性用法需要保存 scroll时的值 如果在 scroll时直接复制给sc
  • 01内存对齐之结构体偏移量

    01内存对齐之结构体偏移量 前提概念 结构体偏移量 所谓偏移量 就是我们每个结构体成员的首地址而已 1 求结构体成员偏移量的两中办法 1 简单求结构体成员偏移量 注意 求偏移量时 必须将地址转成int整数才能求偏移量 不能直接地址相减 否则