使用gcc中的__attribute__指定字节对齐
在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__指定字节对齐相关推荐
- gcc 中的__attribute__ ((packed)) gcc移植,内存对齐.结构体对齐-转
__attrubte__ ((packed)) 的作用就是告诉编译器取消结构在编译过程中的优化对齐,按照实际占用字节数进行对齐. #define __u8 unsigned char #defi ...
- c语言中定义的数组按照指定字节对齐
最近在调试一个简单的网卡裸板收发包demo,组包和拆包时,需要使用dma,而我所使用的处理器的dma是128bit对齐的,因此,在使用dma时,需要保证16字节对齐.采用的对齐方式如下: #pragm ...
- Opencv中IplImage的四字节对齐问题
一.结构解释 IplImage数据结构体中有两个宽度: 1 是width属性,表示图像的每行像素数: 2 是widthStep属性,表示存储一行像素需要的字节数. 在OpenCV里边,widthSte ...
- 关于C++中四字节对齐的坑
最近做一个工程,大体的意思是在程序中定义一个结构,运行中会将结构直接写到文件中,然后另一个程序会用同样的结构读出来.为了验证是写文件的程序的问题还是读文件的程序的问题,用winhex来打开文件,仿照结 ...
- 计算机中的字节对齐问题
[转载]http://www.cnblogs.com/clover-toeic/p/3853132.html 引言 考虑下面的结构体定义: 1 typedef struct{ 2 char c1; 3 ...
- c语言中从字中取高低字节,关于字节对齐
关于字节对齐 一.快速理解 1. 什么是字节对齐 在C语言中,结构是一种复合数据类型,其构成元素既可以是基本数据类型(如int.long.float等)的变量, 也可以是一些复合数据类型(如数组.结构 ...
- Hello C(八)——内存字节对齐
一.内存字节对齐简介 1.内存字节对齐 计算机中内存空间都是按照字节划分的,从理论上讲对任何类型的变量的访问可以从任何地址开始,但是在程序实际编译过程中,编译器会对数据类型在编译过程中进行优化对齐,编 ...
- 程序人生 | C语言字节对齐问题详解 - 对齐/字节序/位序/网络序等(上)
本文首发于 2014-07-21 15:32:28 1. 引言 考虑下面的结构体定义: typedef struct{char c1;short s; char c2; int i; }T_FOO; ...
- C语言字节对齐问题详解
转载原文连接:https://www.cnblogs.com/clover-toeic/p/3853132.html C语言字节对齐问题详解 引言 考虑下面的结构体定义: 1 typedef stru ...
最新文章
- python全栈简介_Python全栈(一)编程语言介绍
- Extjs EditorGridPanel中ComboBox列的显示问题
- cuda grid 和block理解(二)
- python sort 部分元素_Python 简单排序算法-选择、冒泡、插入排序实现
- python语言实现reverse函数翻转字符串_python 实现字符串反转的几种方法
- python提取文本中的数字_EXCEL中提取汉字、字母、数字如此简单
- SpringMVC源码解读 - HandlerMapping - SimpleUrlHandlerMapping初始化
- HttpModule和HttpHandler的常见用法
- 如何设计软件类招聘考题
- linux raid 卡日志,Linux系统下RAID卡异常日志收集方法、系统及存储介质与流程
- 学生管理系统Element UI版
- 对不起,我被裁员了。
- 获取树莓派4系统信息
- 简单实用 微信授权登陆(网页版)
- firefox(火狐浏览器)插件的应用
- 干货!十分钟搞懂消息队列的选型
- 计算机标准差的按键是什么,在计算器上用标准差键直接求离均差平方和的方法...
- 大模型“研究源”告急:2026年高质量语言数据或将耗尽
- 和老BIOS说永别 EFI BIOS技术解析
- HDU 5750 快速筛素数法打表
热门文章
- 变阻感器测量位移的计算机流程图,位移传感器结构框图_位移传感器的工作原理 - 全文...
- 隐函数+导数定义思路
- 计算机维护系统Win8PE,win8维护版64位
- js基本使用-前后台交互(工作问题及解决方法记录)
- 天下IT:程序员能挣哪些外快?
- Go语言标准库中文文档
- Java网络编程与NIO详解13:epoll、poll、select面试题汇总
- windows主机查询产品号和主机序列号
- 考研二战有多难?985高校,公布这一数据
- java三角套利_三角对冲套利-EA原理全解析