__ATTRIBUTE__ 你知多少?
_ATTRIBUTE__ 你知多少?
1 #include "stdio.h" 2 3 /* 地址参考基准 */ 4 5 char r1; 6 short r2;int refer; 7 8 struct p 9 { 10 int a; 11 12 char b; 13 14 short c; 15 16 }__attribute__((aligned(4))) pp; 17 /* 4字节对齐,a本身占4字节 此处占4字节,b本身占1字节 此处占2字节(补齐4字节),c本身占2字节 此处占2字节(补齐4字节)*/ 18 19 struct m 20 { 21 char a; 22 23 int b; 24 25 short c; 26 27 }__attribute__((aligned(4))) mm; 28 /* 4字节对齐,a本身占1字节 此处占4字节(补齐4字节),b本身占4字节 此处占4字节,c本身占2字节 此处占4字节(补齐4字节) */ 29 30 struct o 31 { 32 int a; 33 34 char b; 35 36 short c; 37 38 char d; 39 40 }oo; 41 /* 默认字节对齐同4字节对齐,a本身占4字节 此处占4字节,b本身占1字节 此处占2字节,c本身占2字节 此处占2字节、 42 (b和c一起补齐占4字节,因为b是从4的整数倍地址开始放的),d本身占1字节 此处占4字节(默认字节对齐) */ 43 44 struct x 45 46 { 47 int a; 48 49 char b; 50 51 struct p px; 52 53 short c; 54 55 }__attribute__((aligned(8))) xx; 56 /* 8字节对齐,a本身占4字节 此处占4字节,b本身占1字节 此处占4字节(同a一起补齐8字节因为px是8字节的要从8的整数倍地址放), 57 px本身占8字节 此处占8字节,c本身占2字节 此处占8字节(由于8字节对齐且c是从8的整数倍地址开始放的,所以c要补齐到8字节) */ 58 59 int main() 60 61 { 62 /* 数据类型所占内存大小 */ 63 printf("sizeof(int)=%d, sizeof(short)=%d, sizeof(char)=%d \n", sizeof(int), sizeof(short), sizeof(char)); 64 /* 单个变量的地址分配 */ 65 printf("sizeof(refer)=%d, &refer=0x%08X, &r1=0x%08X,&r2=0x%08X \n", sizeof(refer), &refer, &r1, &r2); 66 /* 4字节对齐的结构体地址分配 */ 67 printf("pp=%d, &pp=0x%08X, &pp.a=0x%08X, &pp.b=0x%08X, &pp.c=0x%08X \n", sizeof(pp), &pp, &pp.a, &pp.b, &pp.c); 68 /* 4字节对齐的结构体地址分配 */ 69 printf("mm=%d, &mm=0x%08X, &mm.a=0x%08X, &mm.b=0x%08X, &mm.c=0x%08X \n", sizeof(mm), &mm, &mm.a, &mm.b, &mm.c); 70 /* 默认字节对齐的结构体地址分配 */ 71 printf("oo=%d, &oo=0x%08X, &oo.a=0x%08X, &oo.b=0x%08X, &oo.c=0x%08X, &oo.d=0x%08X \n", sizeof(oo), &oo, &oo.a, &oo.b, &oo.c, &oo.d); 72 /* 8字节对齐的结构体地址分配 */ 73 printf("xx=%d, &xx=0x%08X, &xx.a=0x%08X, &xx.b=0x%08X, &xx.px=0x%08X, &xx.c=0x%08X \n", sizeof(xx), &xx, &xx.a, &xx.b, &xx.px, &xx.c); 74 75 return 0; 76 77 }
输出结果
转载于:https://www.cnblogs.com/skullboyer/p/7762097.html
__ATTRIBUTE__ 你知多少?相关推荐
- gdt描述_全局描述符表GDT
写在前面 添油加醋系列第二弹--剖析GDT 话说C语言的话除了刷刷OJ外,就是用来实现操作系统这个大头了.C语言比C++少了很多很多臃肿的语法特性,写起来非常优美(至少写操作系统是这样的).虽说C++ ...
- 按键精灵开发者认证1-6题库
这是以前整理的题库,包过. 题目:(前台)区域范围为(100,150)到(200,300)内的所有点是否均为"FFFFFF",是则弹出对话框"没有其他颜色",否 ...
- glibc 知:手册12:输入/输出流
文章目录 1. 前言 2. 输入/输出流 2.1. 流 2.2. 标准流 2.3. 打开流 2.4. 关闭流 2.5. 流和线程 2.6. 国际化应用程序中的流 2.7. 按字符或行的简单输出 2.8 ...
- 知乎大神关于高级ios进阶
链接:https://www.zhihu.com/question/39597307/answer/82258462 在我个人的概念里面, 高级 iOS 工程师的定义,其中 iOS 只占了一半,这一半 ...
- eShopOnContainers 知多少[8]:Ordering microservice
1. 引言 Ordering microservice(订单微服务)就是处理订单的了,它与前面讲到的几个微服务相比要复杂的多.主要涉及以下业务逻辑: 订单的创建.取消.支付.发货 库存的扣减 2. 架 ...
- Java知多少(29)覆盖和重载
在类继承中,子类可以修改从父类继承来的方法,也就是说子类能创建一个与父类方法有不同功能的方法,但具有相同的名称.返回值类型.参数列表. 如果在新类中定义一个方法,其名称.返回值类型和参数列表正好与父类 ...
- (转载)从无知到有知
这篇文章的作者是徐宥,觉得很有共鸣,好东西大家分享一下 February 3, 2010 at 11:07 pm · Filed under Article, Memo, Self-help [这篇文 ...
- host ntrip 千寻rtk_什么是千寻知寸cors账号?它提供的定位服务精度如何?使用时需要注意哪些问题?...
千寻知寸cors账号FindCM:基于RTK技术的厘米级差分数据播发服务,终端设备收到差分数据后,结合自己的卫星观测数据进行高精度定位解算,在观测环境良好的情况下,统计精度可以达到水平2~5厘米,高程 ...
- 为什么vs数据库中文显示问号_本科论文知网不收录为什么会被知网查重到?
在我们写本科毕业论文之际,很多同学都会借鉴一些参考文献.其中就包括往届师兄师姐的学位毕业论文,参考的最多.随之而来的问题也会很多.学校要进行知网查重,很多同学都会先把一些前辈的论文在知网上检索一遍,发 ...
最新文章
- php判断邮箱是否合法性,php验证邮箱地址合法性
- nodejs文件服务器断点续传,基于Nodejs的大文件上传之断点续传
- OEMAddressTable介绍
- Can‘t connect to HTTPS URL because the SSL module is not available
- 干货:MySQL 索引原理及慢查询优化
- Sql Server 2005如何设置连接加密
- mysql安装最后两项无响应,win10下安装mysql8.0.23 及 “服务没有响应控制功能”问题解决办法...
- 线性表:3.链表,单链表详解与C语言实现
- xargs命令_Linux xargs命令:一个给其他命令传递参数的过滤器
- android 进程(复习)
- Python : bitcoin库
- uandroidtool使用教程_apktool反编译详细使用教程_图文教程
- 【原创】Web前端性能优化思维导图
- cad插入块_CAD制图初学入门:CAD软件中属性定义的相关应用
- 数据库关系代数表达式
- 推荐个软件EveryThing(可以快速找到电脑里的各种东西)
- Boot Loader点点滴滴(转)
- 膳食营养与健康类毕业论文文献都有哪些?
- 专题一:Labview表格控件 及 应用(二)
- 多项目同时进行如何做好进度管理