结构体声明当中 __attribute__ ((__packed__))关键字

结构体声明当中 __attribute__ ((__packed__))关键字

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

但是稍微当我们真的不想要字节对齐的时候,有没有办法取消字节对齐?答案是可以,就是在结构体声明当中,加上__attribute__ ((__packed__))关键字,它可以做到让我们的结构体,按照紧凑排列的方式,占用内存。来段实际代码:

#include <stdio.h>
#include <iostream>
 
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

hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » 结构体声明当中 __attribute__ ((__packed__))关键字