当前位置: 首页 > news >正文

计算结构体的大小

#include <stdio.h>

struct mystruct1
{                    // 1字节对齐        4字节对齐
    int a;            // 4                    4
    char b;            // 1                 2(1+1)
    short c;        // 2                    2
};

int main(void)
{
    printf("sizeof(struct mystruct1) = %d.\n", sizeof(struct mystruct1));
      
    return 0;

}

结果:sizeof(struct mystruct1) = 8.

分析:当我们没有指定字节对齐的时候,我们的编译器是默认里面的成员变量的最大字节来对齐的,这里面最大是int4字节,所以它是4字节对齐。char是1字节,short是2字节,char+1字节,然后加上short的2字节,就是4字节。char+1字节+short就等于4字节。所以short不用再占4字节。

#include <stdio.h>

typedef struct mystruct111
{                    // 1字节对齐    4字节对齐        
    int a;            // 4                4                
    char b;            // 1             2(1+1)            
    short c;        // 2                 2                
    short d;        // 2                4(2+2)            
} My111;
int main(void)
{
    printf("sizeof(struct mystruct111) = %d.\n", sizeof(My111));

    return 0;

}

结果:  izeof(struct mystruct111) = 12.我们看4字节对齐那里就晓得怎么来的了

#include <stdio.h>

struct mystruct1
{                    // 1字节对齐     4字节对齐
    int a;            // 4                  4
    char b;            // 1             2(1+1)
    short c;        // 2                 2
};
typedef struct myStruct5
{                              // 1字节对齐    4字节对齐    8字节对齐
    int a;                    // 4                    4                   4+4
    struct mystruct1 s1;   // 7           8                   8
    double b;                // 8                 8                   8
    int c;                    // 4                     4                   4+4
}MyS5;

int main(void)
{
    printf("sizeof(struct mystruct5) = %d.\n", sizeof(MyS5));
    
    return 0;
}

结果:sizeof(struct mystruct5) = 32.

分析:按4字节对齐应该是24,但是我们编译器是按结构体的成员变量最大的字节来对齐的,最大的就是8字节,所以要按8字节对齐,故是32字节。

#include <stdio.h>
#pragma pack(4)   //指定4字节对齐
struct mystruct1
{                    // 1字节对齐    4字节对齐
    int a;            // 4            4
    char b;            // 1            2(1+1)
    short c;        // 2            2
};
typedef struct myStruct5
{                            // 1字节对齐    4字节对齐
    int a;                    // 4            4
    struct mystruct1 s1;    // 7            8
    double b;                // 8            8
    int c;                    // 4            4    
}MyS5;

#pragma pack()
int main(void)
{
    printf("sizeof(struct mystruct5) = %d.\n", sizeof(MyS5));
    
    return 0;
}

结果:sizeof(struct mystruct5) = 24.因为我们指定了4字节对齐,所以现在大小就是24字节

也可以直接在结构体后面指定对齐字节,如下:

typedef struct mystruct111
{                    // 1字节对齐    4字节对齐        2字节对齐
    int a;            // 4            4                4
    char b;            // 1            2(1+1)            2
    short c;        // 2            2                2
    short d;        // 2            4(2+2)            2
}__attribute__((aligned(1024))) My111;//1024字节对齐。__attribute__((aligned(1024)))和My111中间有空格,要特别注意。

我们也可以取消对齐,那么它默认就是1字节对齐

struct mystruct11
{                    // 1字节对齐    4字节对齐
    int a;            // 4            4
    char b;            // 1            2(1+1)
    short c;        // 2            2
}
__attribute__((packed));//取消字节对齐

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

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

ResultMap 关系映射详细使用

关于MyBatis中ResultMap的详细使用ResultMap简介使用ResultMap创建sql 模仿一对多或多对一关系创建数据库创建SpringBoot项目 导入mybatis依赖pojo---------------------------------------------------------------------------------StudentTeacherdao----------------------…...

Nacos心跳时间配置及服务快速上下线

Nacos心跳时间配置及服务快速上下线 Nacos默认心跳时间是30秒&#xff0c;不太满足正式环境需要&#xff0c;需要调整心跳时间更短&#xff0c;让线上服务上下线能快速感知. 1.修改微服务的nacos的心跳配置时间 preserved.heart.beat.interval: 1000 #该实例在客户端上报心跳…...

SpringBoot知识点总结

目录 1、SpringBoot简介及其优点 2、如何重新加载SpringBoot上的更改&#xff0c;而无需重新启动服务器&#xff1f; 3.SpringBoot中的监视器是什么以及如何监视 4.如何在SpringBoot中禁用Actuator端点安全性&#xff1f; 5.如何在自定义端口上运行SpringBoot应用程序&…...

SQL server安装时显示重启计算机失败问题解决办法

SQL server安装时显示重启计算机失败问题解决办法参考文章&#xff1a; &#xff08;1&#xff09;SQL server安装时显示重启计算机失败问题解决办法 &#xff08;2&#xff09;https://www.cnblogs.com/netflix/p/12074481.html 备忘一下。...

Linux系统编程系列(一)

系统软件属于系统的底层&#xff0c;与内核和系统核心库直接进行交互&#xff0c;系统编程则是进行系统软件的关键&#xff0c;熟悉系统编程可以重现如shell、vim、gcc等系统软件。而作为一个高级C/C编程人员&#xff0c;往往需要在底层进行多次调用&#xff0c;学习Linux系统编…...

PAT A 1133 AC代码(两种输出方式)

跑一遍序列&#xff0c;根据要求分别将结点标记存入v1、v2、v3 我二刷时用ans数组合并了v1、v2、v3&#xff0c;再进行输出会方便很多&#xff0c;不然的话需要分别考虑v1、v2、v3是否为空的情况&#xff08;原本我是那样写的&#xff0c;如果是那样写的同学要注意一下只有v2是…...

LCD驱动芯片工厂,稳定提供高抗干扰超低功耗芯片2C23适用于水电气表以及工控仪表类驱动IC

容&#xff1a; VK2C23是一个点阵式存储映射的LCD驱动器&#xff0c;可支持最大224点&#xff08;56SEGx4COM&#xff09;或者最大416点&#xff08;52SEGx8COM&#xff09;的LCD屏。单片机可通过I2C接口配置显示参数和读写显示数据&#xff0c;也可通过指令进入省电模式。其高…...

重拾React框架学习笔记总结

重拾React框架学习笔记总结 环境搭建 nvm nvm用来管理node版本。 brew install nvmnvm ls-remote // 查看所有的node可用版本 nvm list // 查看已安装node版本 nvm install 版本号 // 下载指定node版本&#xff0c;如nvm install v11.14.0 nvm use 版本号 // 使用指定版…...

numpy练习题

numpy 练习题 numpy 的array操作 1.导入numpy库 import numpy as np2.建立一个一维数组 a 初始化为[4,5,6], (1)输出a 的类型&#xff08;type&#xff09;(2)输出a的各维度的大小&#xff08;shape&#xff09;(3)输出 a的第一个元素&#xff08;值为4&#xff09; anp.ar…...

机器学习中分类与聚类的本质区别

机器学习中分类与聚类的本质区别 机器学习中有两类的大问题&#xff0c;一个是分类&#xff0c;一个是聚类。 在我们的生活中&#xff0c;我们常常没有过多的去区分这两个概念&#xff0c;觉得聚类就是分类&#xff0c;分类也差不多就是聚类&#xff0c;下面&#xff0c;我们就…...

SDKD 2021 C1 8th Round

A - Parity 签到&#xff0c;根据奇数偶数的预算性质。 #include <iostream> #include <cstdio> using namespace std; int a,b,k,ans; int main() {cin>>b>>k;for(int ik-1;i>0;i--){scanf("%d",&a);if(b%2&&a%2||a%2&…...

copy代码常出的报错~持续更新

一 AttributeError: DataFrame object has no attribute ixpandas的1.0.0版本后&#xff0c;已经对该函数进行了升级和重构。 只需要将 ix改成 loc二在pycharm中使用 %matplotlib inline 语句会报错 改成 删掉这行代码&#xff0c;用 plt.show() 展示图表%matplotlib inlin…...

极客时间架构师训练营,实战案例

正文 我在做技术面试官的时候&#xff0c;在问完问题后&#xff0c;照例会问一句&#xff1a;你期望的工资是多少&#xff1f;对此&#xff0c;我只会记录下候选人的回答然后上报&#xff0c;没有同意权&#xff0c;更没有批驳权。 判断候选人能否通过面试&#xff0c;主要看…...

暑假acwing算法总结11:STL总结

1、vector 倍增自变长数组&#xff0c;插入均摊o(1)size() 返回元素个数empty() 判断是否为空clear() 清空front()/back() 返回第一/最后一个数push_back()/pop_back() 添加/删除元素begin()/end() 首/尾迭代器遍历方式 for(int i0;i<s.size();i)cout<<a[i]<< …...

事件循环机制(Event Loop)刨根问底

事件循环是什么&#xff1f; 为什么有事件循环机制 因为js是单线程的&#xff0c;注意&#xff0c;浏览器是多线程的。浏览器只给一个线程给js渲染&#xff0c; 假设是多线程&#xff0c;可能会存在这种情况&#xff1a; 若一个线程要操作dom,另一个线程要删除dom&#xff0c;就…...

Kafka学习----Kafka高级理论

Kafka高级理论一 . Kafka 工作流程二. Kafka文件存储机制①. Kafka文件存储机制②. index文件和log文件详解三. Kafka 生产者①. 分区策略1. 分区的原因2. 分区的原则②. 数据可靠性保证1. 副本数据同步策略2. ISR3. ack 应答机制4. 故障处理细节③. Exactly Once 语义四. Kafk…...

ABB喷涂机器人吹扫系统的主要作用

ABB喷涂机器人吹扫系统主要作用是什么 两个字&#xff1a;防爆&#xff01; ABB喷涂 何处简单爆&#xff1f; 如下喷涂机械臂部位 ABB机器人 那么防爆是什么原理 通过吹扫系统不断向机械臂内部输入气体&#xff08;压力可控&#xff09;使机械手内部形成稳定的安全过压环…...

wxWidgets:窗口删除

wxWidgets:窗口删除 wxWidgets:窗口删除关闭窗口默认窗口关闭行为用户呼叫退出菜单优雅地退出应用程序自动删除子窗口其他种类的窗户wxWidgets:窗口删除 窗口删除可能是一个令人困惑的主题,因此提供此概述是为了帮助您明确删除窗口的时间和方式,或响应用户关闭窗口的请求…...

JAVA开发小技巧之----返回封装类

在也代码开发的过程中&#xff0c;我们一般都会封装一个对象&#xff0c;进行统一的返回给前端&#xff0c;常见的其中包含code, msg,data这些值。 之前常用的一个返回封装类: public class ResponseClass<T> {private String code;private String msg;private T data;…...

Node.js-EJS模板

EJS是一个JavaScript模版库&#xff0c;用来将EJS模版结合着JSON数据转换为HTML 并且可以直接在模版中写JavaScript的语法 安装ejs包 //控制台输入 npm i ejs简单示例 let template <h1>Hello, <% name %></h1> let data {name: World }let renderStr …...

ping localhost和本机IP区别

本机IP 下列抓包均在lo口抓取的 ping 本机IP ping localhost ping 127.0.0.1 总结 ping本机IP和127.0.0.1效果一样&#xff0c;该数据包均会被发送到lo口&#xff0c;受防火墙管控ping localhost在lo口没有抓取到数据包&#xff0c;但是实际通了&#xff0c;说明协议栈直接把…...

手写一个去视频水印的程序

去水印使用预览 下边和大家一起分析下做这个去水印工具的思路&#xff0c;很多人乍一听 去水印 &#xff0c;下意识地觉得是一种什么牛比的算法&#xff0c;其实这是一种假象~ 刨根问底 虽说要争口气&#xff0c;可刚开始做的时候我也真是一脸懵逼&#xff0c;因为根本不知道…...

导图解书-羁绊(06)《考试脑科学》

想要考试考出好成绩&#xff0c;一系列好的学习方法不可或缺。想要研究高效率的学习方法&#xff0c;首要之事是理解人脑规则。然后根据这些规则就去制定学习方法&#xff0c;尤其要注意 不要违背人脑规则&#xff0c;或者说去灵活运用人脑规则。而本书就是那个“人脑规则”。 …...

JAVA开发小技巧之----返回封装类

在也代码开发的过程中&#xff0c;我们一般都会封装一个对象&#xff0c;进行统一的返回给前端&#xff0c;常见的其中包含code, msg,data这些值。 之前常用的一个返回封装类: public class ResponseClass<T> {private String code;private String msg;private T data;…...

pytest的mark标记用例功能

用例标记&#xff0c;便于我们更好归类测试用例 pytest.mark.skip跳过此用例:使用跳过装饰器标记它&#xff0c;可以传递一个可选的原因pytest.mark.xxx标记用例为xxx # 执行的时候执行webtest的用例。pytest -v -m xxx # 执行的时候不执行webtest的用例。pytest -v -m not xx…...

遇到 “Failed to import pydot. You must install pydot and graphviz for `pydotprint` to work. “ 怎么办?

网上找了一些教程都无法解决我的问题&#xff0c;如下简单办法即可完美解决 打开Anaconda prompt&#xff0c;输入以下代码 conda install -c anaconda pydot出现提示后&#xff0c;按’y’执行安装 参考文献 windows系统python中的pygraphviz模块如何顺利的安装&#xff1f…...

docker学习笔记(一)

概述 Docker是一款针对程序开发人员和系统管理员来开发、部署、运行应用的一款虚拟化平台。Docker 可以让你像使用集装箱一样快速的组合成应用&#xff0c;并且可以像运输标准集装箱一样&#xff0c;尽可能的屏蔽代码层面的差异。Docker 会尽可能的缩短从代码测试到产品部署的时…...

SpringBoot知识点总结

目录 1、SpringBoot简介及其优点 2、如何重新加载SpringBoot上的更改&#xff0c;而无需重新启动服务器&#xff1f; 3.SpringBoot中的监视器是什么以及如何监视 4.如何在SpringBoot中禁用Actuator端点安全性&#xff1f; 5.如何在自定义端口上运行SpringBoot应用程序&…...

大端小端存储二进制与字节的转换

大端小端二进制与字节的转换 单位换算 位&#xff1a;“位(bit)”是电子计算机中最小的数据单位。每一位的状态只能是0或1。 字节&#xff1a;8个二进制位构成1个“字节(Byte)”&#xff0c;它是存储空间的基本计量单位。1个字节可以储存1个英文字母或者半个汉字&#xff0c…...

vue websocket 连接 复制直接用

<script>export default {data() {return {websock: null,timer: "",startTime: "",endTime: "",}},created() {clearInterval(this.timer);this.timer setInterval(() > {this.initWebSocket();}, 1000);},destroyed() {this.websoc...

mac 软件打包流程 packages打包教程

1 下载packages软件 http://s.sudre.free.fr/Software/Packages/about.html 2 打开软件。选择Distribution。点击next 3 输入project name 这个是packages软件工程的名字&#xff0c;随便起。Project Directory 是保存packages软件工程的位置。然后点击create创建工程。 4 在…...

C# 软件打包方式详解

C# 软件打包方式详解...

Ubuntu下Qt软件打包流程

1.在Qt Creator中将需要打包的项目配置为Release模式&#xff0c;然后构建项目&#xff0c;在Release目录下生成可执行文件&#xff08;例&#xff1a;myApp&#xff09;&#xff1b; 2.新建一个文件夹作为输出目录&#xff08;例&#xff1a;output&#xff09;&#xff0c;将…...

inno setup将exe应用打包成——安装包

文章目录 前言一、打包exe文件 1.安装Inno setup2.打包成安装包 二、测试安装包 前言 使用Inno setup应用来打包exe文件成安装包 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、打包exe文件 1.安装Inno setup 官网网址&#xff1a;https://jrso…...

QT 软件打包为一个单独可执行.exe文件流程

一.将QT程序使用Release编译 二.新建一个文件夹A,将Release编译生成的exe文件复制到新建文件夹中 三. &#xff08;方法一&#xff09;打开命令行工具cmd&#xff0c;进入windeployqt.exe目录再进入新建的文件夹目录&#xff0c;使用 windeployqt 对生成的exe 文件进行打配置动…...

软件打包总结

软件打包总结 最近&#xff0c;参与了一个CS的项目&#xff0c;软件开发完了&#xff0c;在通过简单的基本测试后&#xff0c;需要将CS工程文件打包&#xff0c;部署在客户机上进行测试&#xff0c;项目组就把这个任务交给我了&#xff0c;但这种事情以前都没有干过&#xff0c…...

Python软件打包成EXE文件

我们写好一个Python程序&#xff0c;给同行只需要将代码发个对方&#xff0c;但是要是给一个根本不需要学习python人员&#xff0c;难道我们还帮对方安装一个Python的环境吗&#xff1f; 当然不需要&#xff01; 话不多说&#xff0c;看干货。 第一步&#xff1a;安装pyinstall…...

C#基础教程(十)软件打包

&#xff08;一&#xff09;前言 软件打包很多年前用过&#xff0c;当初用的好像是微软Install Shield Limited Edition&#xff0c;时过境迁&#xff0c;再次想做个安装文件&#xff0c;甚至无从下手&#xff0c;总结出一个原因&#xff0c;就是当时csdn没写篇文章做个Flag。…...

i.MX 6ULL 驱动开发 二十七:块设备

参考&#xff1a;【块设备】通用块层 struct bio 详解 | zzm (aliez22.github.io) 一、Linux 中块设备驱动框架 二、块设备基本概念 1、扇区的概念来自硬件&#xff0c;扇区是硬件最小操作单位。 2、块的概念来自文件系统&#xff0c;是文件系统数据处理的最小单位。 3、段…...

聊一聊OCR

国家863计划信息领域课题组织了清华大学、北京信息工程学院、沈阳自动化所三家单位联合进行中文OCR软件的开发工作。至1989年&#xff0c;清华大学率先推出了国内第一套中文OCR软件–清华文通TH-OCR1.0版&#xff0c;至此中文OCR正式从实验室走向了市场。 清华OCR印刷体汉字识…...

ocr数据集介绍

文章目录ocr常用数据集介绍Chinese Text in the Wild (CTW data)ICPR WTMI2018中文数据集&#xff08;天池比赛数据集&#xff09;ICDAR数据集Reading Chinese Text in the Wild(RCTW-17)Chinese Text in the Wild(CTW)Total-TextCaffe-ocr中文合成数据Synthetic Data for Text…...

基于Ubuntu环境使用docker搭建对于中文识别的chineseocr_lite项目

光学字符识别&#xff08;OCR&#xff09; 光学字符识别&#xff08;OCR&#xff09;目前已经有了很广泛的应用&#xff0c;很多开源项目都会嵌入OCR 来扩展原有的能力&#xff0c;例如身份证识别、出入停车场的车牌识别、拍照翻译等等本文介绍的开源的中文 OCR 项目&#xff…...

OCR:ECCV 2020 论文了解

ECCV --ECCV的全称是Europeon Conference on Computer Vision&#xff0c;两年一次&#xff0c;是计算机视觉三大会议&#xff08;另外两个是ICCV和CVPR&#xff09;之一。 《Sequential Deformation for Accurate Scene Text Detection》 出处&#xff1a;北京国家信息科学…...

Ubuntu环境使用conda安装轻量级中文ocr开源项目chineseocr_lite,最简单的方式

问题 接使用docker的方式来创建项目所报的错误选中文件之后&#xff0c;界面不停的绕圈&#xff0c;显示不了对于图片的识别结果&#xff0c;并且监控界面上出现错误提示如下ImportError: libpython3.6m.so.1.0: cannot open shared object file: No such file or directory&a…...

AI人工智能,OCR 识别技术图像处理 OCR文字识别软件

清华文通th ocr是一款专业的文字识别软件。软件不仅在电脑上可以使用&#xff0c;还支持移动端iOS以及Andeoid系统&#xff0c;支持中英文拍照识别&#xff0c;但是&#xff0c;都是需要用户自行购买的。 文通TH-OCR SDK综合文字识别系统软件V11.0&#xff08;以下简称SDK 11.…...

Hyperreal number

In mathematics, the system of hyperreal numbers is a way of treating infinite and infinitesimal (infinitely small but non-zero) quantities. The hyperreals, or nonstandard reals, *R, are an extension of the real numbers R that contains numbers greater than...

Python之学习笔记(模拟键盘)

准备资料 在我们进行用python开发的时候我们可能需要模拟键盘操作&#xff0c;比如ppt自动翻页的功能。那么在这里就介绍python的模拟键盘。 准备 python_win32api。大概会用到win32gui,win32api,win32con这些东西&#xff0c;这些东西搜pywin_32api就下到了。然后直接安装第…...

IOS开发笔记之常用的第三方库(太多了。)

图像&#xff1a; 1.图片浏览控件MWPhotoBrowser 实现了一个照片浏览器类似 iOS 自带的相册应用&#xff0c;可显示来自手机的图片或者是网络图片&#xff0c;可自动从网络下载图片并进行缓存。可对图片进行缩放等操作。下载&#xff1a;https://github.com/mwaterfall/MWPhoto…...

python 第三方库汇总

库名称简介Chardet字符编码探测器&#xff0c;可以自动检测文本、网页、xml的编码。colorama主要用来给文本添加各种颜色&#xff0c;并且非常简单易用。Prettytable主要用于在终端或浏览器端构建格式化的输出。difflib&#xff0c;[Python]标准库&#xff0c;计算文本差异Leve…...

python3 安装一些无法直接安装的第三方库 笔记[ubuntu]

virtkey 模拟键盘操作 方法1:更新包索引&#xff1a;# sudo apt-get update安装python3-virtkey deb包&#xff1a;# sudo apt-get install python3-virtkey方法2:https://ubuntu.pkgs.org/18.04/ubuntu-universe-i386/python3-virtkey_0.63.0-0ubuntu7_i386.deb.html下载deb包…...