没有合适的资源?快使用搜索试试~ 我知道了~
likenow#blog#2020-7-14-理解C结构体字节对齐与占用内存大小1
需积分: 0 0 下载量 172 浏览量
2022-07-25
14:34:03
上传
评论
收藏 6KB MD 举报
温馨提示
试读
写在前面的话最近有被问到:结构体怎么写占用内存小?很惭愧,当时没答到点子上 ~~呜呜呜结构体占用内存计算结构体中同样的变量个数,却可能导致占用内存的大小不同。直
资源推荐
资源详情
资源评论
---
title: 理解C结构体字节对齐与占用内存大小
date: 2020-07-14 13:59:51
categories:
- C
tags:
- 结构体
- C
- 字节对齐
---
## 写在前面的话
**最近有被问到:结构体怎么写占用内存小?** 很惭愧,当时没答到点子上 ~~呜呜呜
## 结构体占用内存计算
结构体中同样的变量个数,却可能导致占用内存的大小不同。直接上代码:
```
#include
// 每个平台上的编译器都有默认对齐系数n,可以通过#pragma pack(n)来指定。
#pragma pack(8)
struct _A
{
char a;
int b;
short c;
long long d;
} A;
struct _B
{
int c;
double a;
char b[10];
} B;
struct _C
{
double a;
int c;
char b[10];
} C;
struct _D
{
int a;
//long double大小为16bytes
long double b;
char c[10];
} D;
void structSizeFunc(void)
{
printf("size A.a = %lud \n", sizeof(A.a));
printf("size A.b = %lud \n", sizeof(A.b));
printf("size A.c = %lud \n", sizeof(A.c));
printf("size A.d = %lud \n", sizeof(A.d));
printf("size A = %lud \n", sizeof(A));
printf("size B.a = %lud \n", sizeof(B.a));
printf("size B.b = %lud \n", sizeof(B.b));
printf("size B.c = %lud \n", sizeof(B.c));
printf("size B = %lud \n", sizeof(B));
printf("size C.a = %lud \n", sizeof(C.a));
printf("size C.b = %lud \n", sizeof(C.b));
printf("size C.c = %lud \n", sizeof(C.c));
printf("size C = %lud \n", sizeof(C));
printf("size D.a = %lud \n", sizeof(D.a));
printf("size D.b = %lud \n", sizeof(D.b));
printf("size D.c = %lud \n", sizeof(D.c));
printf("size D = %lud \n", sizeof(D));
}
打印:
size A.a = 1d
size A.b = 4d
size A.c = 2d
size A.d = 8d
size A = 24d
size B.a = 8d
size B.b = 10d
size B.c = 4d
size B = 32d
size C.a = 8d
size C.b = 10d
size C.c = 4d
size C = 24d
size D.a = 4d
size D.b = 16d
size D.c = 10d
size D = 40d
```
### 计算规则
#### �
点击阅读更多
资源评论
吉利吉利
- 粉丝: 21
- 资源: 308
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功