unix/linux 字节对齐补齐
2016-02-25 09:26
399 查看
/* * aligned.c * * Created on: 2016-2-24 * Author: xfhu */ #include <stdio.h> /* * 设置属性packed,使1字节对齐补齐,因此sizeof(C)=10,没有未使用的内存空余 */ typedef struct A{ char a; double b; char c; }__attribute__((packed)) A; /* * 该操作系统默认使用4字节对齐方式,总共为sizeof(B)=16字节因此内存使用为: * 第1字节 :存放a * 第2~4字节 :因为字节对其,未使用 * 第5~12字节 :存放b * 第13字节 :存放c * 第14~16字节 :因为字节对其,未使用 */ typedef struct B{ char a; double b; char c; }B; /* * 预处理指令,使1字节对齐补齐,因此sizeof(C)=10,没有未使用的内存空余 */ #pragma pack(1) typedef struct C{ char a; double b; char c; }C; /* * 恢复默认对齐补齐方式 */ #pragma pack() typedef struct D{ char a; double b; char c; }D; /* * 设置内部字节对齐补齐,即如果E 不足32字节,则因为对齐补齐,会分配32字节,以至于E是32字节对齐补齐。 */ typedef struct E{ char a; double b; char c; }__attribute__((aligned(32))) E; int main(int argc,char** argv){ printf("sizeof char=%d\n",sizeof(char)); printf("sizeof double=%d\n",sizeof(double)); printf("sizeof int=%d\n",sizeof(int)); printf("sizeof A=%d\n",sizeof(A)); // 10 printf("sizeof B=%d\n",sizeof(B)); // 16 printf("sizeof C=%d\n",sizeof(C)); // 10 printf("sizeof D=%d\n",sizeof(D)); // 16 printf("sizeof E=%d\n",sizeof(E)); // 32 return 0; }
相关文章推荐
- linux grep命令详解
- centos关机与重启命令详解
- Linux 内核list_head container_of
- Linux 标准库下的unistd.h
- Linux服务启动报:Address already in use 解决方法:预留端口避免占用ip_local_reserved_ports
- linux僵尸进程产生的原因以及如何避免产生僵尸进程
- Linux运维细讲第一节之文件权限
- Debian8.3安装sogoiu旗下的linux输入法,缺少fonts-droid这个包的问题。
- Linux(CentOS6) zeromq编译安装
- Java9积极解决Linux中的GTK GUI难题
- Linux下同步模式、异步模式、阻塞调用、非阻塞调用总结
- SSH连接下复制远程linux服务器文件到本地的命令
- Linux中的In命令
- Centos 7 网卡bug一例
- #Linux协议栈你学得会# 之 本机地址 vs 127.0.0.1
- centos 关机和重启命令详解
- 在win8下安装centos7报错解决
- (转)Linux的chattr与lsattr命令详解
- linux学习笔记三_umask
- linux学习笔记二_查看系统使用状态