数据结构 / 结构体字节计算
1. 结构体的存储
- 结构体各个成员的地址是连续的
- 结构体变量的地址是第一个成员的地址
2. 64位操作系统8字节对齐
- 结构体的总字节大小是各个成员字节的总和,字节的总和需要是最宽成员的倍数
- 结构体的首地址是最宽成员的倍数
- 结构体各个成员的偏移量是该成员字节的倍数,否则填充空字节
例子1:
#include <string.h>
#include <stdlib.h>
#include <stdio.h>struct A
{int a; //4 char b; //1 short c; //2 float d; //4 }a;int main(int argc, const char *argv[])
{printf("a=%p\n", &a);printf("a.a=%p\n", &a.a);printf("a.b=%p\n", &a.b);printf("a.c=%p\n", &a.c);printf("a.d=%p\n", &a.d);printf("sizieof(a)=%ld\n", sizeof(a));return 0;
}
计算

运行结果
a=0x55b0037eb018
a.a=0x55b0037eb018
a.b=0x55b0037eb01c
a.c=0x55b0037eb01e
a.d=0x55b0037eb020
sizieof(a)=12
例子2:
#include <string.h>
#include <stdlib.h>
#include <stdio.h>struct A
{int *a; //8 char b; //1 double c; //8 long d; //8 } s1; int main(int argc, const char *argv[])
{printf("s1=%p\n", &s1);printf("s1.a=%p\n", &s1.a);printf("s1.b=%p\n", &s1.b);printf("s1.c=%p\n", &s1.c);printf("s1.d=%p\n", &s1.d);printf("sizieof(s1)=%ld\n", sizeof(s1));return 0;
}
计算

运行结果
s1=0x55e754e4e040
s1.a=0x55e754e4e040
s1.b=0x55e754e4e048
s1.c=0x55e754e4e050
s1.d=0x55e754e4e058
sizieof(s1)=32
例子3:
#include <string.h>
#include <stdlib.h>
#include <stdio.h>struct S
{char a[5]; //int b; //} s3; int main(int argc, const char *argv[])
{printf("s3=%p\n", &s3);printf("s3.a=%p\n", &s3.a);printf("s3.b=%p\n", &s3.b);printf("sizieof(s3)=%ld\n", sizeof(s3));return 0;
}
计算

运行结果
s3=0x55da08b43018
s3.a=0x55da08b43018
s3.b=0x55da08b43020
sizieof(s3)=12
3. 32位操作系统,4字节对齐:
- 结构体的总字节大小是各个成员字节的总和,字节的总和需要是最宽成员的倍数
- 如果最宽成员是1,则是1的倍数
- 如果最宽成员是2,则是2的倍数
- 如果最宽成员是4,8,则是4的倍数
- 结构体的首地址是最宽成员的倍数
- 结构体各个成员的偏移量是该成员字节的倍数,否则填充空字节
- 如果成员字节是1,则偏移量是1的倍数
- 如果成员字节是2,则偏移量是2的倍数
- 如果成员字节是4,8,则偏移量是4的倍数
例子4:
#include <string.h>
#include <stdlib.h>
#include <stdio.h>struct S5
{char a; //int *b; double c;long d;}s5 ;struct S6
{char e[5];struct S5 s5; int f;}s6;int main(int argc, const char *argv[])
{printf("s6.e=%p\n", &s6.e);printf("s6.s5.a=%p\n", &s6.s5.a);printf("s6.s5.b=%p\n", &s6.s5.b); printf("s6.s5.c=%p\n", &s6.s5.c);printf("s6.s5.d=%p\n", &s6.s5.d);printf("s6.f=%p\n", &s6.f);printf("sizieof(s6)=%ld\n", sizeof(s6));return 0;
}
~
计算

运行结果
s6.e=0x565cf040
s6.s5.a=0x565cf048
s6.s5.b=0x565cf04c
s6.s5.c=0x565cf050
s6.s5.d=0x565cf058
s6.f=0x565cf05c
sizieof(s6)=32
相关文章:
数据结构 / 结构体字节计算
1. 结构体的存储 结构体各个成员的地址是连续的结构体变量的地址是第一个成员的地址 2. 64位操作系统8字节对齐 结构体的总字节大小是各个成员字节的总和,字节的总和需要是最宽成员的倍数结构体的首地址是最宽成员的倍数结构体各个成员的偏移量是该成员字节的倍数…...
rancher2.6 docker版本部署
1. 拉取镜像 docker pull rancher/rancher:v2.6.5 注: 上面命令中rancher的版本v2.6.5,仅仅是我因为我们环境中使用的k8s都是 1.20.1 到1.23.6 之间的版本。rancher支持的k8s版本,在github上查看:Release Release v2.6.5 ranche…...
UE5人物残影学习(材质实现)
学习视频 UE4简单的材质球残影人教学,你学会了吗!_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1rY411q7Yb/?spm_id_from333.788.top_right_bar_window_history.content.click 结果预览 1.创建残值,混合模式勾选半透明 “混合模…...
Spring Boot 内置工具类
一、对象、数组、集合 ObjectUtils 1.获取对象的基本信息 // 获取对象的类名。参数为 null 时,返回字符串:"null" String nullSafeClassName(Object obj)// 参数为 null 时,返回 0 int nullSafeHashCode(Object object)// 参数…...
C语言--每日选择题--Day27
第一题 1. 对于代码段,问下面不可以表示a[1]地址的是() int a[10]; A:&a[0] 1 B:a sizeof(int) C:(int*)&a 1 D:(int*)((char*)&a sizeof(int)) 答案及解析 A A:取到…...
黑马程序员索引学习笔记
文章目录 索引的分类从索引字段特性从物理存储从数据结构组成索引的字段个数 InnoDB主键索的Btree高度为多高呢?explain执行计划最左匹配原则索引失效情况SQL提示覆盖索引、回表查询前缀索引索引设计原则 索引的分类 从索引字段特性 主键索引、唯一索引、常规索引、全文索引…...
新手如何对一个web网页进行一次渗透测试
新手如何对一个web网页进行一次渗透测试 文章目录 新手如何对一个web网页进行一次渗透测试什么是渗透测试?渗透测试和红蓝对抗的区别那么拿到一个网站后如何进行一次优雅的渗透测试呢 什么是渗透测试? 在获得web服务运营的公司书面授权的情况下,模拟攻击者的行为…...
vs2019 - MFC对话框程序的工程名称不支持下划线命名法
文章目录 vs2019 - MFC对话框程序的工程名称不支持下划线命名法概述笔记备注END vs2019 - MFC对话框程序的工程名称不支持下划线命名法 概述 正在写账单分析程序, 用MFC 对话框. 因为比较习惯下划线命名法, 就在向导中给工程名称起了一个my_test这样的名称(下划线命名法, 小…...
java JDBCUtils 使用静态代码块连接数据库 全程值保持一次连接
\src\com\data\entity\JDBCUtils.java 使用静态代码块连接数据库 全程值保持一次连接 package com.data.entity;import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.datasource.DriverManagerDataSource;import javax.sql.DataSource;pub…...
剑指 Offer(第2版)题解(C++ Version)
剑指 Offer(第2版)题解(C Version) 剑指 Offer(第2版)题解(C Version)面试题 3:数组中重复的数字面试题 4:二维数组中的查找面试题 5:替换空格面试…...
6.15合并二叉树(LC617-E)
算法: 前序、中序、后序都可以,这道题正常逻辑一般都是用前序 正确代码: 这里就是在root1这颗树上改的,也可以新建一个树。 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode …...
百度智能小程序系统源码+关键词排名优化 附带完整的搭建教程
百度智能小程序系统的开发背景是基于百度强大的技术实力和对用户需求的深入理解。在移动互联网时代,用户对便捷、高效、智能的服务需求越来越高。而小程序作为一种轻量级的应用程序,恰好能够满足用户的这些需求。然而,开发一个小程序需要掌握…...
2019年11月7日 Go生态洞察:Go Modules v2及更高版本
🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…...
vue3通过provide和inject实现多层级组件通信
父组件 <template><div><h1>我是父组件 {{num}}</h1><hr><child></child></div> </template><script setup> import child from ./child.vue; import { ref,provide } from vue; let num ref(520) provide(pare…...
【Java学习笔记】72 - 满汉楼 - 餐饮管理系统
项目代码 https://github.com/yinhai1114/Java_Learning_Code/tree/main/IDEA_Chapter26 一、需求说明 满汉楼项目功能多,界面复杂,涉及到复杂的awt和swing技术和事件编程,做如下调整: 1.去掉界面和事件处理(工作中使用很少),使…...
【我的创作纪念日】
机缘 大家好,我是圥忈ゼ, 2023 年 07 月 20 日,我撰写了第 1 篇技术博客:《我的编程未来规划》,也是由于我高考后的专业选择,和就业方向的选择,加上想立志成为一名专业 IT 作者,我结…...
车载通信架构 —— 传统车内通信网络MOST总线(光纤传输、专精多媒体)
车载通信架构 —— 传统车内通信网络MOST总线(光纤传输、专精多媒体) 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都…...
使用Pytorch从零开始构建Energy-based Model
知识回顾: [1] 生成式建模概述 [2] Transformer I,Transformer II [3] 变分自编码器 [4] 生成对抗网络,高级生成对抗网络 I,高级生成对抗网络 II [5] 自回归模型 [6] 归一化流模型 [7] 基于能量的模型 [8] 扩散模型 I, 扩散模型 II 在本教程中…...
基于C#实现梳排序
为什么取名为梳,可能每个梳都有自己的 gap 吧,大梳子 gap 大一点,小梳子 gap 小一点。上一篇我们看到鸡尾酒排序是在冒泡排序上做了一些优化,将单向的比较变成了双向,同样这里的梳排序也是在冒泡排序上做了一些优化。 …...
盘点72个Android系统源码安卓爱好者不容错过
盘点72个Android系统源码安卓爱好者不容错过 学习知识费力气,收集整理更不易。 知识付费甚欢喜,为咱码农谋福利。 链接:https://pan.baidu.com/s/1qiWeLjF2i4dlgmTYgPPSvw?pwd8888 提取码:8888 项目名称 A keyboardlisten…...
【优化器】带动量 Momentum 的SGD算法
思想: 让参数更新具有惯性,每一步更新都是由前面梯度累积 vvv 和当前点梯度 ggg 组合而成 公式: 累计梯度(动量更新):v←αv(1−α)gv \leftarrow \alpha v (1-\alpha) gv←αv(1−α)g参数更新…...
springAI中tools的使用
1.使用Tool注解注册toolTool(description "获取当前日期和时间,当用户询问时间、日期时调用。")public String getCurrentDateTime() {log.info("tools调用获取时间");return LocalDateTime.now().format(DateTimeFormatter.ofPattern("y…...
Wan2.2-I2V-A14B实战:基于JDK 1.8构建兼容性强的本地Java调用客户端
Wan2.2-I2V-A14B实战:基于JDK 1.8构建兼容性强的本地Java调用客户端 1. 引言:当老系统遇上新AI 很多企业都面临这样的困境:核心业务系统还在跑着JDK 1.8,但AI服务已经要求Java 11的环境。上周我就遇到一个制造业客户,…...
D3KeyHelper终极指南:5分钟掌握暗黑3智能宏,游戏效率提升300%
D3KeyHelper终极指南:5分钟掌握暗黑3智能宏,游戏效率提升300% 【免费下载链接】D3keyHelper D3KeyHelper是一个有图形界面,可自定义配置的暗黑3鼠标宏工具。 项目地址: https://gitcode.com/gh_mirrors/d3/D3keyHelper 如果你正在寻找…...
告别龟速下载!八大网盘直链下载助手让你文件下载飞起来
告别龟速下载!八大网盘直链下载助手让你文件下载飞起来 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼…...
从IEDM到ISSCC:一篇顶会论文的诞生与芯片工程师的‘追星’指南
从IEDM到ISSCC:芯片工程师的顶会论文实战指南 去年冬天,我在实验室熬到凌晨三点,终于完成了人生第一篇ISSCC投稿。屏幕上闪烁的"Submit"按钮仿佛在嘲笑我过去365天的挣扎——从复现2019年那篇获得最佳论文奖的PLL设计,…...
Frameworks 常规问题关键定位
点击电源亮屏关键定位 亮屏电源按下流程 熄屏电源按下流程 熄屏电源按下流程 通知FW流程 通知打盹模式Snoozed(通知上滑,一段时间不会在出通知) 上滑进入打盹...
【Neural Whole-Body Control: HOVER ExBody2 神经】第四部分:代码实战:PyTorch + IsaacLab 4.2 数据准备:从MoCap到IsaacLab
目录 关键实现细节与技术要点 1. SMPL+H 到机器人的映射策略 2. 关节限制不匹配处理 (IK-based Fixing) 3. IsaacLab兼容的数据格式 4. 后处理优化 5. 针对舞蹈视频的特殊处理 使用示例与下一步 生产级数据准备实战脚本。该实现涵盖了从SMPL+H到G1/傅利叶GR-1的完整重定…...
如何用KeymouseGo彻底告别重复工作:免费鼠标键盘录制工具终极指南
如何用KeymouseGo彻底告别重复工作:免费鼠标键盘录制工具终极指南 【免费下载链接】KeymouseGo 类似按键精灵的鼠标键盘录制和自动化操作 模拟点击和键入 | automate mouse clicks and keyboard input 项目地址: https://gitcode.com/gh_mirrors/ke/KeymouseGo …...
Ubuntu 22.04 下 Intel D405 开箱即用:手把手教你安装 Realsense Viewer 和驱动
Ubuntu 22.04 下 Intel D405 深度相机从开箱到实战:完整配置指南 拆开快递包装的那一刻,Intel RealSense D405深度相机就躺在防静电袋里——这款紧凑型设备将成为你三维视觉项目的得力助手。不同于消费级摄像头,D405通过主动红外投影实现毫米…...
