在x86(32位机器)平台下,GCC编译器默认按4字节对齐:

如:结构体4字节对齐,即结构体成员变量所在的内存地址是4的整数倍。

可以通过使用gcc中的_attribute_选项来设置指定的对齐大小

attribute((packed)),让所作用的结构体取消在编译过程中的优化对齐,按照实际占用字节数进行对齐
attribute((aligned (n))),让所作用的结构体成员对齐在n字节边界上。如果结构体中有成员变量的字节长度大于n,则按照最大成员变量的字节长度来对齐。


#include <stdio.h>struct person0{char *name;int age;char score;int id;
};struct person1{char *name;int age;char score;int id;
}__attribute__((packed));struct person2{char *name;int age;char score;int id;
} __attribute__((aligned (4)));int main(int argc,char **argv)
{printf("size of (struct person0) = %d.\n",sizeof(struct person0));printf("size of (struct person1) = %d.\n",sizeof(struct person1));printf("size of (struct person2) = %d.\n",sizeof(struct person2));return 0;
}

结果:


补充:

#define CZG_SIZE(n) ((n + (x-1)) & ~(x-1))

作用:确保n是以x字节对齐

例如:#define CZG_SIZE(n) ((n + (3)) & ~(3))
-》#define CZG_SIZE(n) ((n + (4-1)) & ~(4-1))

作用:确保n是以4字节对齐
解释:+3, 是保证比这个数4大;&~3,是保证后两位bit 为0,即被4整除。所以合起来:比s 大的能被4整除的数, 通俗讲就是按4byte 对齐。

使用gcc中的__attribute__指定字节对齐相关推荐

  1. gcc 中的__attribute__ ((packed)) gcc移植,内存对齐.结构体对齐-转

    __attrubte__ ((packed)) 的作用就是告诉编译器取消结构在编译过程中的优化对齐,按照实际占用字节数进行对齐. #define __u8    unsigned char #defi ...

  2. c语言中定义的数组按照指定字节对齐

    最近在调试一个简单的网卡裸板收发包demo,组包和拆包时,需要使用dma,而我所使用的处理器的dma是128bit对齐的,因此,在使用dma时,需要保证16字节对齐.采用的对齐方式如下: #pragm ...

  3. Opencv中IplImage的四字节对齐问题

    一.结构解释 IplImage数据结构体中有两个宽度: 1 是width属性,表示图像的每行像素数: 2 是widthStep属性,表示存储一行像素需要的字节数. 在OpenCV里边,widthSte ...

  4. 关于C++中四字节对齐的坑

    最近做一个工程,大体的意思是在程序中定义一个结构,运行中会将结构直接写到文件中,然后另一个程序会用同样的结构读出来.为了验证是写文件的程序的问题还是读文件的程序的问题,用winhex来打开文件,仿照结 ...

  5. 计算机中的字节对齐问题

    [转载]http://www.cnblogs.com/clover-toeic/p/3853132.html 引言 考虑下面的结构体定义: 1 typedef struct{ 2 char c1; 3 ...

  6. c语言中从字中取高低字节,关于字节对齐

    关于字节对齐 一.快速理解 1. 什么是字节对齐 在C语言中,结构是一种复合数据类型,其构成元素既可以是基本数据类型(如int.long.float等)的变量, 也可以是一些复合数据类型(如数组.结构 ...

  7. Hello C(八)——内存字节对齐

    一.内存字节对齐简介 1.内存字节对齐 计算机中内存空间都是按照字节划分的,从理论上讲对任何类型的变量的访问可以从任何地址开始,但是在程序实际编译过程中,编译器会对数据类型在编译过程中进行优化对齐,编 ...

  8. 程序人生 | C语言字节对齐问题详解 - 对齐/字节序/位序/网络序等(上)

    本文首发于 2014-07-21 15:32:28 1. 引言 考虑下面的结构体定义: typedef struct{char c1;short s; char c2; int i; }T_FOO; ...

  9. C语言字节对齐问题详解

    转载原文连接:https://www.cnblogs.com/clover-toeic/p/3853132.html C语言字节对齐问题详解 引言 考虑下面的结构体定义: 1 typedef stru ...

最新文章

  1. python全栈简介_Python全栈(一)编程语言介绍
  2. Extjs EditorGridPanel中ComboBox列的显示问题
  3. cuda grid 和block理解(二)
  4. python sort 部分元素_Python 简单排序算法-选择、冒泡、插入排序实现
  5. python语言实现reverse函数翻转字符串_python 实现字符串反转的几种方法
  6. python提取文本中的数字_EXCEL中提取汉字、字母、数字如此简单
  7. SpringMVC源码解读 - HandlerMapping - SimpleUrlHandlerMapping初始化
  8. HttpModule和HttpHandler的常见用法
  9. 如何设计软件类招聘考题
  10. linux raid 卡日志,Linux系统下RAID卡异常日志收集方法、系统及存储介质与流程
  11. 学生管理系统Element UI版
  12. 对不起,我被裁员了。
  13. 获取树莓派4系统信息
  14. 简单实用 微信授权登陆(网页版)
  15. firefox(火狐浏览器)插件的应用
  16. 干货!十分钟搞懂消息队列的选型
  17. 计算机标准差的按键是什么,在计算器上用标准差键直接求离均差平方和的方法...
  18. 大模型“研究源”告急:2026年高质量语言数据或将耗尽
  19. 和老BIOS说永别 EFI BIOS技术解析
  20. HDU 5750 快速筛素数法打表

热门文章

  1. 变阻感器测量位移的计算机流程图,位移传感器结构框图_位移传感器的工作原理 - 全文...
  2. 隐函数+导数定义思路
  3. 计算机维护系统Win8PE,win8维护版64位
  4. js基本使用-前后台交互(工作问题及解决方法记录)
  5. 天下IT:程序员能挣哪些外快?
  6. Go语言标准库中文文档
  7. Java网络编程与NIO详解13:epoll、poll、select面试题汇总
  8. windows主机查询产品号和主机序列号
  9. 考研二战有多难?985高校,公布这一数据
  10. java三角套利_三角对冲套利-EA原理全解析