结构体内存对齐——2
时间:2022-07-24
本文章向大家介绍结构体内存对齐——2,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
#include <stdio.h>
#include <string.h>
#include <malloc.h>
/* So, when you are working with image headers, binary headers, and network packets, and are trying to access the
TCP/ IP header, structure padding has to be avoided. */
int main(int argc, char* argv[])
{
//#pragma pack(1)
struct gif_hdr
{
char signature[3];
char version[3];
int width;
char height;
char colormap;
char bgcolor;
char ratio;
}__attribute__ ((aligned(4)));
对齐到4字节 = 3+3+2+4+1+1+1+1 = 16
struct gif_hdr v1 = {1,2,3,4,5,6,7,8,9,10,11};
struct gif_hdr *dsptr;
printf("Size of structure data = %dn", sizeof(struct gif_hdr));
dsptr = (struct gif_hdr*)malloc(sizeof(struct gif_hdr));
printf("&(dsptr->signature[0]) = %pn", &(dsptr->signature[0]));
printf("&(dsptr->version[0]) = %pn", &(dsptr->version[0]));
printf("&(dsptr->width) = %pn", &(dsptr->width));
printf("&(dsptr->height) = %pn", &(dsptr->height));
printf("&(dsptr->colormap) = %pn", &(dsptr->colormap));
printf("&(dsptr->bgcolor) = %pn", &(dsptr->bgcolor));
printf("&(dsptr->ratio) = %pnn", &(dsptr->ratio));
printf("Offset of signature = %dn", &(dsptr->signature[0]) - &(dsptr->signature[0]) );
printf("Offset of version = %dn", &(dsptr->version[0]) - &(dsptr->signature[0]) );
printf("Offset of width = %dn", (char*)&(dsptr->width) - &(dsptr->signature[0]));
printf("Offset of height = %dn", &(dsptr->height) - &(dsptr->signature[0]));
printf("Offset of colormap = %dn", &(dsptr->colormap) - &(dsptr->signature[0]));
printf("Offset of bgcolor = %dn",&(dsptr->bgcolor) - &(dsptr->signature[0]));
printf("Offset of ratio = %dn", &(dsptr->ratio) - &(dsptr->signature[0]));
return 0;
}
# struct_packed4.exe
Size of structure data = 16
&(dsptr->signature[0]) = 006E1898
&(dsptr->version[0]) = 006E189B
&(dsptr->width) = 006E18A0
&(dsptr->height) = 006E18A4
&(dsptr->colormap) = 006E18A5
&(dsptr->bgcolor) = 006E18A6
&(dsptr->ratio) = 006E18A7
Offset of signature = 0
Offset of version = 3
Offset of width = 8
Offset of height = 12
Offset of colormap = 13
Offset of bgcolor = 14
Offset of ratio = 15
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android 多线程实现重复启动与停止的服务
- Android 简单的图片查看器源码实现
- jmeter在linux系统下运行及本地内存调优的方法详解
- Android实现录音功能实现实例(MediaRecorder)
- Linux下9种优秀的代码比对工具推荐小结
- Android开发实现在Wifi下获取本地IP地址的方法
- Android基于Glide v4.x的图片加载进度监听
- Android如何通过scheme跳转界面
- Android EditText实现输入金额类型详解
- ubuntu20.04中文输入法安装步骤
- 如何利用Android Studio将moudle变成jar示例详解
- Android自带的四种线程池使用总结
- CentOS8.1搭建Gitlab服务器详细教程
- Android开发之图片旋转功能实现方法【基于Matrix】
- Android编程简单实现拨号器功能的方法