怎么计算union和struct中字节数计算

2023-11-17

首先我的运行结果都是在64位系统的Xcode中运行的!

然后,这个只是由于对于标准的位移量方法看得头疼,自己总结出来的,如果有错误或者不明欢迎留言!

字节:一般成8位为一个字节,在Xcode中sizeof(int)等于4,在这里也就采用int占用4个字节的说法!

typedef union {
    long i;int k[5];char c;
}DATE;
union ,百科上称之为 联合 ,我这种直入OC的小白今天没有接触过!似乎是为了节省内存而诞生的关键字.

大体上union的结构和struct结构体类似,不同的是同一时刻union中只会存放一个成员,一旦对另一个成员赋值,原来那个成员就会被覆盖!

而结构体支持同时对内部成员多个赋值,当然代价是内存!

要计算union的大小,首先要找到占用字节最多的成员,本例中是long,占用8个字节,int k[5]中都是int类型,仍然是占用4个字节的,

然后union的字节数必须是占用字节最多的成员的字节的倍数,而且需要能够容纳其他的成员,

为了要容纳k[5](20个字节),就必须要保证是8的倍数的同时还要大于20个字节,所以是24个字节!

所以这个union占用内存大小为24个字节!

struct date{
    int cat;//4
    int s;
    DATE cow;//24
    double dog;//8
}too;
对于结构体,规则类似,首先要找出其占用字节数最长的成员,注意这里不是DATE cow,而是double dog或者说是union中的long i!

所以里面占有字节数最长的成员的字节数为8个字节!

当里面有其他类型的时候需要将其先拆封!然后再计算大小!

然后按照上面的规则,首先是int cat占用4个字节,不足8个字节,不是8的倍数,所以补足到8个字节,

是否需要补足看下一个成员的类型是否是占用最大字节数的类型,是就需要对前面字节补足,对于后面的字节数一样!

然后是int s也是不足8个字节,这里可以纳入前面空余的4个字节,一起构成8个字节!

然后DATE cow占用24个字节,一起32个字节,是8的倍数,不用补字节!

最后是double dog,也是8个字节,一起加起来40个字节!刚好是40个字节!

所以这个结构体大小为40个字节!

在这个结构体中如果没有int s,针对int cat计算,只有4个字节,不是8的倍数,所以需要补足到8个字节,所以大小还是40个字节!

如果有int s则在任意位置加入一个char成员,那么都要增加8个字节!

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

怎么计算union和struct中字节数计算 的相关文章

  • C 中动态数组的大小不会改变

    我正在得到realloc invalid next size对于一个程序 所以我只是编写了这个代码来了解发生了什么 include
  • Oracle:合并两个具有不同列的表

    这是表1 col 1 col 2 date 1 1 3 2016 2 4 2015 这是表 2 col 3 col 4 date 2 5 8 2014 6 9 2012 我想要这样的结果 col 1 col 2 col 3 col 4 da
  • 带 order by 和 limit 的 SQL Union All (Postgresql)

    在以下查询中我收到语法错误 SELECT
  • 为什么C中函数的大小总是1字节?

    当我们使用以下命令检查函数的大小时sizeof 我们总是得到1 byte 这1个字节代表什么 这是一个约束违规 你的编译器should诊断它 如果它编译它 尽管如此 你的程序有未定义的行为 感谢 Steve Jessop对失败模式的澄清 并
  • phpMyAdmin 对我的 UNION ALL 查询做了什么?

    以下查询返回 1 行 SELECT coach id FROM table a WHERE coach id 8 UNION ALL SELECT coach id FROM table b WHERE coach id 8 But SEL
  • 多表之间的SQL映射

    这是一个SQL设计问题 首先 设置 我有三张桌子 A 根据对链接服务器的查询自动填充 该表中的数据不能更改 B 只有十几行 包含 As 集合的名称 AtoB 它是映射表 通过它将 As 组织成命名集合 两列上都有外键 例如 A 包含 Gir
  • 范围交集/并集

    我正在开发一种编程语言 我想为其提供Range数据类型 目前不像通常那样是一个成对的列表int values x y 的约束条件是x lt y 我说不像通常那样 因为通常范围只是一对 但在我的情况下 它超过 例如允许 1 to 5 7 to
  • 错误-1054 order子句中未知的列e.id

    我有一个这样的查询 SELECT e id FROM event e WHERE e startdatetime
  • 具有虚函数的类的大小

    我正在修改 C 概念 但我坚持使用非常简单的代码 include
  • sizeof如何知道操作数数组的大小?

    这可能是一个愚蠢的问题 但是当您不传入数组中的元素数量时 sizeof 运算符如何知道数组操作数的大小 我知道它不会返回数组中的总元素 而是返回字节大小 但为了得到它 它仍然必须知道数组何时结束 只是好奇这是如何工作的 sizeof在编译时
  • C++:使用 sizeof 确定字符数组的大小

    看下面一段 C 代码 char a1 a b c char a2 abc cout lt lt sizeof a1 lt lt endl lt lt sizeof a2 lt lt endl Though sizeof char 是1个字节
  • UNION 类型“...”和“...”无法匹配

    当我运行下面的查询时 我收到此错误 UNION 类型 text 和 bigint 无法匹配 SELECT 1 AS STEP AS ProviderName AS Procedurecode Claimid Patient First Na
  • 如何使大循环的联合范围更快

    我有一个子程序 在循环中进行大约 5000 次迭代后 它变得非常慢 否则很快 Windows 8 1 专业版 64 位 Excel 2013 15 0 4701 1001 MSO 15 0 4701 1000 64 位 Sub UnionS
  • 在联合上分配泛型类型

    TS 中有没有办法通过联合 分布 泛型类型 type Container a value A type Containers a
  • sizeof 运算符的实现

    我尝试过实现 sizeof 运算符 我是这样做的 define my sizeof x x 1 x 但对于任一数据类型 结果总是为 1 然后我用谷歌搜索了一下 发现了以下代码 define my size x char x 1 char x
  • 使用不同数据集的 UNION ORDER BY (T-SQL)

    我有一个疑问UNION的两个有点相似的数据集 但它们都有一些在另一个数据集中不存在的列 即 这些列在结果中具有 NULL 值 UNION 问题是 我需要ORDER使用仅存在于一个或另一组中的那些列来生成结果数据 以便以软件端友好的格式获取数
  • 具有混合成员类型的通用 TypeScript 接口

    对于几个 HTML 表单 我想配置输入并处理它们的值 我的类型具有以下结构 您可以将其复制到 TypeScript Playgroundhttp www typescriptlang org play http www typescript
  • 指向成员函数的指针的大小疯狂变化

    有一个非常微妙的问题 得到一个用 MS VS 2013 c 编译器编译的类 对于 32 位平台 大小为 4 个字节 函数指针的大小为 4 个字节 但是 当这个类使用相同的编译器编译但包含到不同的项目中以生成库时 也针对 32 位平台 则该类
  • SQL:两个没有完整列匹配的表的并集

    我有一个table A其中有一组列A1 A2和一个具有一组列的 table bB1 B2 碰巧的是A2 B1但其余列不匹配 也不应该匹配 我想附加表格 所以我使用UNION ALL 对于不匹配的列 我使用null as COLUMN NAM
  • 为什么结构中“[0]byte”的位置很重要?

    0 byte在golang中不应该占用任何内存空间 但这两个结构体的大小不同 type bar2 struct A int 0 byte type bar3 struct 0 byte A int 那么为什么这个位置 0 byte这里重要吗

随机推荐

  • SpringCloud2架构图

    先来个简洁版 1 外部或者内部的非Spring Cloud项目都统一通过API网关 Zuul 来访问内部服务 zuul是对外暴露的唯一接口相当于路由的是controller的请求 2 网关接收到请求后 从注册中心 Eureka 获取可用服务
  • Unity泛光效果消失问题

    关于Unity泛光效果消失问题解决过程 问题描述 第一次尝试解决 第二次尝试解决 第三次尝试解决 问题描述 之前一直在做的一个项目 在一次想要添加UI泛光效果失败后 发现项目中已有的泛光效果也消失了 第一次尝试解决 因为问题是在添加插件Po
  • linux服务器编译报错:DSO missing from command line原因及解决办法

    报错信息提示包含以下两行 undefined reference to symbol libfastrtps so 1 error adding symbols DSO missing from command line 原因 提示说符号没
  • SpringMVC异常处理

    为了统一处理代码运行过程中出现的异常 给用户一个更友好的异常界面 需要引入springMVC的异常处理功能 为了演示这个功能 本文实现一个比较常用的需求 将所有的异常归为两类 一类是程序员自己创建的异常类 另一类是系统或框架定义的异常类 程
  • junit如何测试没有返回值的方法

    方法里总有些操作 只要测试结果对就可以了 没有必要说非要有返回值 马士兵
  • 深入理解 SQL 中的 Grouping Sets 语句

    前言 SQL 中 Group By 语句大家都很熟悉 根据指定的规则对数据进行分组 常常和聚合函数一起使用 比如 考虑有表 dealer 表中数据如下 id Int city String car model String quantity
  • Linux系统下ping命令报错 name or service not know

    问题描述 CentOS 但是当执行ping命令的时候 提示name or service not known 解决方法 1 添加DNS服务器 1 vi etc resolv conf 进入编辑模式 增加如下两行内容 分别是首选DNS服务器和
  • logback--进阶--05--自定义Appenders

    logback 进阶 05 自定义Appenders 代码位置 https gitee com DanShenGuiZu learnDemo tree master logback learn 1 介绍 1 1 继承关系图 可以看到Appe
  • C++ 多态和虚函数

    一 先搞清override overload overwrite的区别 1 overload 重载 不是多态 在C 程序中 可以将语义 功能相似的几个函数用同一个名字表示 但参数不同 包括类型 顺序不同 即函数重载 1 相同的范围 在同一个
  • 药明康德成都研发中心投入运营;中国白酒行业净利润将迎来七年来首次下滑

    今日看点 药明康德成都研发中心正式投入运营 该研发中心将成为药明康德上海研发总部以外 又一个覆盖化学及生物学的新药发现整体研发平台 将为客户提供从小分子药物设计 合成 分析 体内体外生物学 肿瘤免疫学等全方位 一体化的新药研发服务 该研发中
  • 【编译原理】LR(1)分析方法(c++实现)

    前文回顾 编译原理 LR 0 分析方法 c 实现 编译原理 SLR 1 分析方法 c 实现 算法 来自龙书第二版 代码 和SLR的区别其实只是DFA中多了一个搜索符 构建分析表的时候规约项的列是相应的搜索符而已 代码基本上就在SLR的代码上
  • 拼多多anti_content算法

    最近拼多多的anti content算法更新了 闲着无聊就看了看 总思路如下 首先我们抓包 看到我们今天的目标 anti content 现在 我们通过堆栈入口随便下个断点 然后我们在CallStack中向下寻找 经过漫长的寻找 我们可以在
  • route命令的详细使用介绍

    1 命令格式 route f p Command Destination mask Netmask Gateway metric Metric if Interface 2 命令功能 Route命令是用于操作基于内核ip路由表 它的主要作用
  • es单机数据迁移到另一个es单机

    将一个Elasticsearch单机的数据迁移到另一个Elasticsearch单机主要可以分为两步 第一步 备份原有数据 将原有Elasticsearch单机中的数据备份到一个文件中 可以使用 Elasticsearch 提供的 snap
  • 第三十讲:神州路由器路由重分发配置

    RIP和OSPF协议是目前应用最广泛的路由协议 两种协议交接的场合也很多见 两种协议的重分布是比较常见的配置 主校区原来所采用的网络协议为OSPF 而分校区采用的路由协议是RIP 采用RIP和OSPF重分发技术可以解决此问题 实验拓扑图如下
  • PostgreSQL、Greenplum 日常监控 和 维护任务

    背景 Greenplum的日常监控点 评判标准 日常维护任务 展示图层 由于一台主机可能跑多个实例 建议分层展示 另外 即使是ON ECS虚拟机 一个虚拟机一个实例一对一的形态 的产品形态 实际上也建议分层展示 以示通用性 主机级图层 1
  • vue项目全局内引入外部CDN地址的js文件

    通过vue cli 构建的vue项目的根目录下 有一个index html文件 例如
  • 跳过selenium检测爬取淘宝直通车

    最近 有对阿里商家端进行一些数据爬取 这次爬取的是直通车人群溢价数据 发现对selenium的检测相当厉害 然而我的回答是 你强任你强 清风拂山岗 咱人工登录怕过谁 什么cokies user agent selenium检测 token
  • Android构建问题解决方案

    1 问题一 解决方法 在app下的build gradle中加上 packagingOptions exclude META INF DEPENDENCIES exclude META INF NOTICE exclude META INF
  • 怎么计算union和struct中字节数计算

    首先我的运行结果都是在64位系统的Xcode中运行的 然后 这个只是由于对于标准的位移量方法看得头疼 自己总结出来的 如果有错误或者不明欢迎留言 字节 一般成8位为一个字节 在Xcode中sizeof int 等于4 在这里也就采用int占