数要多出一些,而如何减少内存占用,计算内存使用量,也是很多面试题里经常出现的题目。(字节对齐的详细内容请自行寻找资料,不要依靠本篇文章中的现象跟结果来理解字节对齐)

但是稍微当我们真的不想要字节对齐的时候,有没有办法取消字节对齐?答案是可以,就是在结构体声明当中,加上__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__))关键字相关推荐

  1. c语言 结构体声明和引用、,结构体的声明与自引用

    今天上了数据结构课程的第一堂课,经常会看到下面这种语法:结构体有个成员变量是指向该结构体的指针,也就是自引用(self reference).翻看了下一章节内容,才知道这是链表的结构基础.平时C语言用 ...

  2. 【Golang第8章:面向对象编程】Go语言的结构体是什么,怎么声明;Golang方法的调用和声明;go语言面向对象实例,go语言工厂模式;golang面向对象的三大特性:继承、封装、多态

    介绍 这个是在B站上看边看视频边做的笔记,这一章是Glang面向对象编程 这一章内容较多,内容有Go语言的结构体是什么,怎么声明:Golang方法的调用和声明:go语言面向对象实例,go语言工厂模式: ...

  3. 【C 语言】结构体 ( 结构体类型定义 | 结构体类型别名 | 声明结构体变量的三种方法 | 栈内存中声明结构体变量 | 定义隐式结构体时声明变量 | 定义普通结构体时声明变量 )

    文章目录 一.结构体类型定义 二.结构体类型别名 三.结构体类型变量声明 1.使用结构体类型 ( 别名 ) 声明变量 2. 定义隐式结构体时声明变量 3.定义普通结构体时声明变量 二.完整代码示例 一 ...

  4. C语言中结构体标签的使用

    C语言中结构体标签的使用 我们都知道,结构体标签就是结构体的名称,为结构体命名可以方便我们在后续继续使用该结构体. 如 struct student {char* name;int age; }str ...

  5. 【C 语言】结构体 ( 结构体 数组 作为函数参数 | 数组 在 堆内存创建 )

    文章目录 一.结构体 数组 作为函数参数 ( 数组 在 堆内存创建 ) 二.完整代码示例 一.结构体 数组 作为函数参数 ( 数组 在 堆内存创建 ) 在上一篇博客 [C 语言]结构体 ( 结构体 数 ...

  6. 【剑仙教程】易语言的结构体。自定义数据类型。

    1楼. [剑仙教程]易语言的结构体.自定义数据类型. 在易语言中,有基本数据类型,自定义数据类型. 自定义数据类型,在C语言/C++中称为结构体.这是面向对象和类的编程. . . 先上代码.打开易语言 ...

  7. c语言常量结构体的成员,c语言之结构体

    c语言之结构体 1.结构体基础知识 C语言提供了两种类型的聚合数据类型(能够同时存储超过一个的单独数据),数组和结构.数则是相同类型的元素的集合,而结构也是一些值的集合,这些值称为它的成员,单一个结构 ...

  8. c语言中申请内存并初始化,c语言中结构体的定义、初始化及内存分配

    #include struct person { char *name; int age; }; int main() { //结构体可以定义在函数内,也可以定义到函数外 //相当于全局变量与局部变量 ...

  9. 小白来学C语言之结构体

    文章目录 概念 为什么要有结构体? 定义和使用结构体变量 自己建立结构体类型 定义结构体类型变量 结构体变量的初始化和引用 使用结构体数组 定义结构体数组 结构体指针 指向结构体变量的指针 指向结构体 ...

最新文章

  1. Linux的SERVER_NAME 和HTTP_HOST
  2. nb信号和4g信号_手机信号很强但是4G网络却很卡?学会这三招,立马恢复网速
  3. java 多线程同步问题_Java多线程同步问题:一个小Demo完全搞懂
  4. vue 扫码页面限制区域_Vue.js 单页面多路由区域操作的实例详解
  5. 623. 在二叉树中增加一行
  6. 如何部署 Hyperic ,使得从内网监测外网服务器
  7. [linux]CentOS安装pre-built Nginx
  8. gan通过python实现_python通过requests库实现爬虫(二)
  9. 设置Mysql5.6允许外网访问详细流程
  10. python 发布自定义模块(图文诠释)
  11. python是干嘛的-python到底拿来干什么
  12. python基础-文件处理与函数
  13. 音乐格式转换软件测试工程师,免费音频转换器:如何把MP3文件转换为其他格式...
  14. php 句号,句号 - Programming Life - PHP博客
  15. 第2节---小任务,爬取百度LOGO链接并下载图片
  16. 《掌控习惯》读书笔记
  17. 想改变Facebook? 先改变扎克伯格!
  18. Linux内核中内存分配函数
  19. 淘宝自动回复机器人配置手册——目前2018年淘宝主流自动回复软件一览
  20. ArcEngine编辑模块——将线段按距离、按比例分割成两部分

热门文章

  1. python pdf转图片 poppler_如何使用Python中的poppler库从pdf中提取图像?
  2. 高匿HTTP代理要如何挑选?
  3. MATLAB函数参数的传递
  4. 写给小白的小波变换原理分析
  5. 沉浸式音视频互动要通过什么技术来实现?
  6. 网站备案所需准备材料
  7. 大数据算法_荆州2020年大数据算法章节答案-老友网
  8. 运行python报错ImportError: dlopen: cannot load any more object with static TLS
  9. 负折射率波导matlab,MATLAB数值计算在光学仿真和教学中的应用
  10. 永新中学2021年文科高考成绩查询,预计2021年高考文科分数线