c语言packed,结构体声明当中 __attribute__ ((__packed__))关键字
数要多出一些,而如何减少内存占用,计算内存使用量,也是很多面试题里经常出现的题目。(字节对齐的详细内容请自行寻找资料,不要依靠本篇文章中的现象跟结果来理解字节对齐)
但是稍微当我们真的不想要字节对齐的时候,有没有办法取消字节对齐?答案是可以,就是在结构体声明当中,加上__attribute__ ((__packed__))关键字,它可以做到让我们的结构体,按照紧凑排列的方式,占用内存。来段实际代码:
#include
#include
using namespace std;
struct test1 {
char c;
int i;
};
struct __attribute__ ((__packed__)) test2 {
char c;
int i;
};
int main()
{
cout << "size of test1:" << sizeof(struct test1) << endl;
cout << "size of test2:" << sizeof(struct test2) << endl;
}
运行结果:
size of test1:8
size of test2:5
显而易见,test1结构体里面没有加关键字,它采用了4字节对齐的方式,即使是一个char变量,也占用了4字节内存,int占用4字节,共占用了8字节内存,这在64位机器当中将会更大。
而test2结构体,再加上关键字之后,结构体内的变量采用内存紧凑的方式排列,char类型占用1字节,int占用4字节,总共占用了5个字节的内存。
这些功能,在你动态的去更改结构体大小,并通过内存来直接访问内部变量时非常好用,就比如redis的sds类型,都是加上了__attribute__ ((__packed__))关键字,来达到这些功能,详细的可以自行阅读redis源码或者观看另一篇博客~
————————————————
版权声明:本文为CSDN博主「weixin_39533180」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_39533180/article/details/76207099
c语言packed,结构体声明当中 __attribute__ ((__packed__))关键字相关推荐
- c语言 结构体声明和引用、,结构体的声明与自引用
今天上了数据结构课程的第一堂课,经常会看到下面这种语法:结构体有个成员变量是指向该结构体的指针,也就是自引用(self reference).翻看了下一章节内容,才知道这是链表的结构基础.平时C语言用 ...
- 【Golang第8章:面向对象编程】Go语言的结构体是什么,怎么声明;Golang方法的调用和声明;go语言面向对象实例,go语言工厂模式;golang面向对象的三大特性:继承、封装、多态
介绍 这个是在B站上看边看视频边做的笔记,这一章是Glang面向对象编程 这一章内容较多,内容有Go语言的结构体是什么,怎么声明:Golang方法的调用和声明:go语言面向对象实例,go语言工厂模式: ...
- 【C 语言】结构体 ( 结构体类型定义 | 结构体类型别名 | 声明结构体变量的三种方法 | 栈内存中声明结构体变量 | 定义隐式结构体时声明变量 | 定义普通结构体时声明变量 )
文章目录 一.结构体类型定义 二.结构体类型别名 三.结构体类型变量声明 1.使用结构体类型 ( 别名 ) 声明变量 2. 定义隐式结构体时声明变量 3.定义普通结构体时声明变量 二.完整代码示例 一 ...
- C语言中结构体标签的使用
C语言中结构体标签的使用 我们都知道,结构体标签就是结构体的名称,为结构体命名可以方便我们在后续继续使用该结构体. 如 struct student {char* name;int age; }str ...
- 【C 语言】结构体 ( 结构体 数组 作为函数参数 | 数组 在 堆内存创建 )
文章目录 一.结构体 数组 作为函数参数 ( 数组 在 堆内存创建 ) 二.完整代码示例 一.结构体 数组 作为函数参数 ( 数组 在 堆内存创建 ) 在上一篇博客 [C 语言]结构体 ( 结构体 数 ...
- 【剑仙教程】易语言的结构体。自定义数据类型。
1楼. [剑仙教程]易语言的结构体.自定义数据类型. 在易语言中,有基本数据类型,自定义数据类型. 自定义数据类型,在C语言/C++中称为结构体.这是面向对象和类的编程. . . 先上代码.打开易语言 ...
- c语言常量结构体的成员,c语言之结构体
c语言之结构体 1.结构体基础知识 C语言提供了两种类型的聚合数据类型(能够同时存储超过一个的单独数据),数组和结构.数则是相同类型的元素的集合,而结构也是一些值的集合,这些值称为它的成员,单一个结构 ...
- c语言中申请内存并初始化,c语言中结构体的定义、初始化及内存分配
#include struct person { char *name; int age; }; int main() { //结构体可以定义在函数内,也可以定义到函数外 //相当于全局变量与局部变量 ...
- 小白来学C语言之结构体
文章目录 概念 为什么要有结构体? 定义和使用结构体变量 自己建立结构体类型 定义结构体类型变量 结构体变量的初始化和引用 使用结构体数组 定义结构体数组 结构体指针 指向结构体变量的指针 指向结构体 ...
最新文章
- Linux的SERVER_NAME 和HTTP_HOST
- nb信号和4g信号_手机信号很强但是4G网络却很卡?学会这三招,立马恢复网速
- java 多线程同步问题_Java多线程同步问题:一个小Demo完全搞懂
- vue 扫码页面限制区域_Vue.js 单页面多路由区域操作的实例详解
- 623. 在二叉树中增加一行
- 如何部署 Hyperic ,使得从内网监测外网服务器
- [linux]CentOS安装pre-built Nginx
- gan通过python实现_python通过requests库实现爬虫(二)
- 设置Mysql5.6允许外网访问详细流程
- python 发布自定义模块(图文诠释)
- python是干嘛的-python到底拿来干什么
- python基础-文件处理与函数
- 音乐格式转换软件测试工程师,免费音频转换器:如何把MP3文件转换为其他格式...
- php 句号,句号 - Programming Life - PHP博客
- 第2节---小任务,爬取百度LOGO链接并下载图片
- 《掌控习惯》读书笔记
- 想改变Facebook? 先改变扎克伯格!
- Linux内核中内存分配函数
- 淘宝自动回复机器人配置手册——目前2018年淘宝主流自动回复软件一览
- ArcEngine编辑模块——将线段按距离、按比例分割成两部分
热门文章
- python pdf转图片 poppler_如何使用Python中的poppler库从pdf中提取图像?
- 高匿HTTP代理要如何挑选?
- MATLAB函数参数的传递
- 写给小白的小波变换原理分析
- 沉浸式音视频互动要通过什么技术来实现?
- 网站备案所需准备材料
- 大数据算法_荆州2020年大数据算法章节答案-老友网
- 运行python报错ImportError: dlopen: cannot load any more object with static TLS
- 负折射率波导matlab,MATLAB数值计算在光学仿真和教学中的应用
- 永新中学2021年文科高考成绩查询,预计2021年高考文科分数线