struct大小的问题

我看MFC的过去、现在和未来 首先说句题外话,虽然我现在的“主业”是Qt,但自己扪心自问,对MFC的熟悉程度要超过Qt。正是由于有了对MFC的熟悉,才能在使用Qt时,比较清醒的认清两者的优劣之处,在此暂且不提。 这个话题也可以说是由来已久,众说纷纭,今时我也谈谈自己的感悟。 一、对MFC的总体看法 首先看看云风在其《游戏之旅-我的编程感悟》一书中对MFC的看法: “我所见到的程序员中,很多把C+ 阅读详情
int main(){
    struct test
    {
        char i;
        int t;
    };
    test a;
    a.i = 'f';
    a.t = 1;
    int i = sizeof(a);
    printf("%d\n", sizeof(a.i));
    printf("%d\n",sizeof(a.t));
    printf("%d\n", i);
    system("pause");
    return 0;
}

运行结果:
1
4
8

#include <stdio.h>
#include <stdlib.h>

struct test
{
    char a;
    float b;
    int c;
    double d;
};

int main(){
    test t;
    int i = sizeof(t);
    printf("这个结构体的大小为:%d", i);
    return 0;
}

运行结果:
这个结构体的大小为:24

原因:
结构体是一种复合数据类型,通常编译器会自动的进行其成员变量的对齐,已提高数据存取的效率。在默认情况下,编译器为结构体的成员按照自然对齐(natural alignment)条方式分配存储空间,各个成员按照其声明顺序在存储器中顺序存储。

在默认对齐方式下,结构体成员的内存分配满足下面三个条件
1.结构体第一个成员的地址和结构体的首地址相同
2.结构体每个成员地址相对于结构体首地址的偏移量(offset)是该成员大小的整数倍,如果不是则编译器会在成员之间添加填充字节(internal adding)。
3.结构体总的大小要是其成员中最大size的整数倍,如果不是编译器会在其末尾添加填充字节(trailing padding)。

简单来说,struct的大小计算为:其中变量所占大小的最小公倍数(这个数还必须大于所有变量所占大小的和)

[Dify] HTTP 请求节点总是调不通?先把请求头、参数、变量和返回 JSON 拆开查 这篇文章围绕 Dify HTTP 请求节点调不通、接口能通但流程不稳定、返回 JSON 后续节点读不到等问题展开,从 Method、URL、Header、Body、变量映射和返回字段提取几个角度梳理排查顺序。适合正在把 Dify Workflow 接入企业微信、CRM、工单系统或内部接口的读者阅读,帮助你把接口调用从一次性跑通推进到可复用、可验证的业务流程。 阅读详情

相关推荐

MQTT阿里云OTA 调试记录

2.验证,这个验证是什么意思呢,就是阿里云会把你包的信息,比如包大小,streamid(相当于包的识别码),版本号发送给你的设备,然后如果你没发送升级成功的包给阿里云,这里会是一直验证中的状态,那你的设备每次重新连接阿里云,发送connect包给阿里云的时候,阿里云就会发送一次这个验证(upgrade)包。提取到了之后就可以发送请求包了,这个请求包比较坑,也可能是我没付费,他的包一次最多只有1024个字节的数据。之前说了,验证状态下,设备发送connect包给阿里云,阿里云就会发一个upgrade包给你。

qq_42585211的博客 1231

struct大小

预备知识:基本类型占用字节在32位操作系统和64位操作系统上,基本数据类型分别占多少字节呢?32位操作系统:char : 1    int :4    short : 2    unsigned int : 4    long : 4    unsigned long : 4    long long : 8     float : 4    double : 8    指针 : 464位操作系统...

u010112268的博客 6241

从零构建:STM32与EC800 4G模块的工业物联网数据透传实战

本文详细介绍了如何从零构建STM32与EC800 4G模块的工业物联网数据透传系统。内容涵盖硬件选型、抗干扰电路设计、AT指令稳定性优化、网络连接管理、可靠数据透传协议以及低功耗策略,为开发者提供了一套可直接应用于工业场景的完整实战方案。

uran的专栏 1014

关于C语言——结构体struct的大小是如何计算的

C语言中的内存是比较复杂的,能够认识了解内存,对学习C语言能有莫大的帮助! 关于结构体的大小有如下规律: 1、结构体的大小是由n个“结构体中最大的那个类型”的大小模块组成(n<=成员个数); 2、一个模块中,可以存储多个成员,前提是多个成员的大小不超过模块存储的大小; 3、结构体中的成员按定义顺序存储。 文字表达总是不方便,我们可以用sizeof()来计算大小。 sizeof(char) = 1 sizeof(short) = 2 sizeof(int) = 4 sizeof(long)

Surge_Pitt的博客 5620

蓝桥杯历年真题分类汇总(史上最全版本,一定不要错过)

天再高又怎样,踮起脚尖就更接近阳光。 满满的 题型总结​ 历年真题​ 视频讲解​ 比赛技巧 题型总结 2021 2020 2019 2018 2017 2016 2015 2014 2013 ...

m0_58367586的博客 11万+

ArcMap对遥感图像进行语义分割标注

使用arcmap对遥感图像进行语义分割标注

qq_41708916的博客 4046

struct结构体内存大小(转载)

结构体内存大小

Robbin_mi的博客 1518

【Chisel】2.4 时序逻辑

2.4 时序逻辑@[TOC](2.4 时序逻辑)前言寄存器(`Reg`)实例Chisel的状态函数实例2 RegNext实例3 RegInit移位器附录 显式的时钟信号和复位信号 前言 没有状态机的逻辑电路是不完整的,没有状态机的逻辑电路是不完整的,没有状态机的逻辑电路是不完整的,重要的事情说三遍。 这一节我们将要学习Chisel中的时序逻辑。在最后我们会实现一个移位器。 这里你需要知道的是,前面的这几节实际上都是对Chisel的基础语法的学习,它并不会给你带来很大的“惊喜”。Chisel真正的作用是把电路

快乐学习小猪猪的博客 843

struct结构体大小计算、原理以及跨平台注意事项

内存对齐 变量放在能被他本身大小(sizeof)所整除的地址上,addr % sizeof(value_type) == 0,举个例子: 内存对齐时CPU取数据 和 内存不对齐时CPU取数据区别 struct A { char a; int b; }; 内存不对齐时结构体内存布局以及读取数据的过程: 在很久之前,内存资源是十分宝贵的 ...

KingOfMyHeart的博客 983

深入解析MOSFET结电容与分布参数:Cgd、Cgs、Cds与Ciss、Crss、Coss的关系与应用

本文深入解析了MOSFET结电容Cgd、Cgs、Cds及其等效参数Ciss、Crss、Coss对开关性能的影响。文章详细阐述了米勒电容Cgd如何导致开关损耗与振荡,并提供了基于电容参数的高频电路选型、驱动设计及PCB布局优化等实战指南,帮助工程师解决开关电源与电机驱动中的常见问题。

weixin_29240711的博客 1285

全志A133的AndroidSDK

本小节来学习如何下载全志安卓SDK,SDK的目录,编译和烧录提示:以下是本篇文章正文内容,下面案例可供参考以上就是整个SDK的目录和编译烧录,目的在于让初学者快速了解整个源码的目录和编译出镜像喜欢就订阅吧。

qq_24093081的博客 4054

【结构体的大小】

sizeof(S):结构体变量S所占用的内存大小所占字节 strlen():计算字符串长度 结构体中最长成员的长度:union

piano_diano的博客 552

DC/DC开关电源学习笔记(十五)四开关Buck-Boost-FSBB升降压电路拓扑与工作原理

在DCDC领域,最为常见的是buck拓扑,其次是boost拓扑,而buck-boost的关注度相对较低。但是在电池供电场景日益普及的现在,升降压的需求在不断上升,现在更加关注buck-boost这个拓扑。而在所有buck-boost拓扑中,四开关buck-boost最受欢迎。四开关buck-boost的拓扑很简单,如下图。

小幽余生不加糖 6007

记一个UE5的struct大小问题

要注意多层嵌套使用USTRUCT就有可能遇到这种问题。对于大数据,还是封装成Class会更友好。warning C4305: “初始化”: 从“size_t”到“uint16”截断。USTRUCT生成代码时,会将sizeof(T)强转为uint16进行存储记录。因此任何一个USTRCUT,总的大小不能超过2^16,也就是64k。error C4309: “初始化”: 截断常量。

qq_40963872的博客 149

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

struct大小相关问题

在默认情况下,方便对结构体内的

Brady_never 622

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

struct和union的大小问题

union类型以其中size最大的为其大小 struct类型以其中所有size大小之和为其大小 #include<iostream> usingnamespacestd; intmain() { typedefunion{longi;intk[5];charc;}DATE; structdata{intcat;DATE...

weixin_30567225的博客 190

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

union和struct对齐大小问题

对齐就是要满足存储变量的起始地址与对齐大小余数为0。 对于union,分两步:先算union对齐大小,对齐的大小是取决于union成员中字节对齐最大的那个;再算union实际分配的空间,而分配给union的实际大小不仅要满足是对齐大小的整数倍,同时要满足实际大小不能小于最大成员的大小。 如: Union U1 { Char a[9]; Int b; }; 成员a是char数组,对

funny_fly的博客 532

C++,struct大小的问题

利用sizeof计算struct的大小的时候,要考虑内存对齐

jlstmac的开发笔记 973

由union引发的Struct占用内存空间和大小端问题的思考

union变量如何在内存中存放?struct如何计算内存空间大小?union对于解决大小端的问题有什么方便之处?大小端有何异同?字节在内存地址中如何放置?这里一一与 大家探讨

andyqingliu的博客 718

struct 和 class所占字节的大小问题

函数声明不算大小,虚函数要算一个指针大小(多个虚函数也只算一个虚函数) 一、相同类型,直接累加 class base{ int a; int b; } sizeof(base) == 8 二、不同类型,向所占字节数最高类型对齐 class base{ int a; char b; } sizeof(base) == 8 class base{ int a; char b; char c; } sizeof(base) == 8 class base{ int a; char b..

weixin_43387492的博客 695

分配task_struct时分配页面的大小的问题

#define THREAD_SIZE (PAGE_SIZE #define THREAD_SIZE_ORDER    1 THREAD_SIZE定义为两个页面来表示一个内核线程 #define alloc_task_struct_node(node)

SunnyBeiKe的专栏 1647

struct结构大小的问题

1. 什么是对齐,以及为什么要对齐       现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定变量的时候经常在特定的内存地址访问,这就需要各类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。       对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数

1309

C++ 类的大小 struct/class内存对齐问题

第一:空类的大小 classCBase { }; 运行cout<<"sizeof(CBase)="<<sizeof(CBase)<<endl; sizeof(CBase)=1; 为什么空的什么都没有是1呢? 先了解一个概念:类的实例化,所谓类的实例化就是在内存中分配一块地址,每个实例在内存中都有独一无二的地址。同样空类也会被实例化(别拿豆包不当干粮,...

m0_37988084的博客 586

struct的存储空间大小问题

struct CurrencyStruct        {            public long Dollars;            public byte Cents;            public override string ToString()            {                return "$" + Dollars + "." + Cen

swort_177的专栏 936

struct的成员对齐问题-结构体实际大小问题

struct的成员对齐 注意:为了方便说明,等号左边是每个数据单独所占长度,右边是最终空间大小,以字节为单位。 一、什么时间存在对其问题:(32位机对齐方式是按照4字节对其的,以下所有试验都是在32位机上验证的)   当结构体成员数据按照其顺序组合,无法按4字节对齐时,存在对其问题。   如:     1+1=2;     1+2=3;     1+2+1=4(而不是6或者...

a7892088的博客 160

struct,class的sizeof大小问题

在32位机器上,下列代码中class A { int i; union U { char buff[13]; int i; }u; void foo() { } typedef char* (*f)(void*); enum{red, green,

coolwriter的博客 915
上一篇: makefile(转)
下一篇: c++函数调用规则
彼得.攀
博客等级 码龄11年 11粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值