_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__ 你知多少?相关推荐

  1. gdt描述_全局描述符表GDT

    写在前面 添油加醋系列第二弹--剖析GDT 话说C语言的话除了刷刷OJ外,就是用来实现操作系统这个大头了.C语言比C++少了很多很多臃肿的语法特性,写起来非常优美(至少写操作系统是这样的).虽说C++ ...

  2. 按键精灵开发者认证1-6题库

    这是以前整理的题库,包过. 题目:(前台)区域范围为(100,150)到(200,300)内的所有点是否均为"FFFFFF",是则弹出对话框"没有其他颜色",否 ...

  3. glibc 知:手册12:输入/输出流

    文章目录 1. 前言 2. 输入/输出流 2.1. 流 2.2. 标准流 2.3. 打开流 2.4. 关闭流 2.5. 流和线程 2.6. 国际化应用程序中的流 2.7. 按字符或行的简单输出 2.8 ...

  4. 知乎大神关于高级ios进阶

    链接:https://www.zhihu.com/question/39597307/answer/82258462 在我个人的概念里面, 高级 iOS 工程师的定义,其中 iOS 只占了一半,这一半 ...

  5. eShopOnContainers 知多少[8]:Ordering microservice

    1. 引言 Ordering microservice(订单微服务)就是处理订单的了,它与前面讲到的几个微服务相比要复杂的多.主要涉及以下业务逻辑: 订单的创建.取消.支付.发货 库存的扣减 2. 架 ...

  6. Java知多少(29)覆盖和重载

    在类继承中,子类可以修改从父类继承来的方法,也就是说子类能创建一个与父类方法有不同功能的方法,但具有相同的名称.返回值类型.参数列表. 如果在新类中定义一个方法,其名称.返回值类型和参数列表正好与父类 ...

  7. (转载)从无知到有知

    这篇文章的作者是徐宥,觉得很有共鸣,好东西大家分享一下 February 3, 2010 at 11:07 pm · Filed under Article, Memo, Self-help [这篇文 ...

  8. host ntrip 千寻rtk_什么是千寻知寸cors账号?它提供的定位服务精度如何?使用时需要注意哪些问题?...

    千寻知寸cors账号FindCM:基于RTK技术的厘米级差分数据播发服务,终端设备收到差分数据后,结合自己的卫星观测数据进行高精度定位解算,在观测环境良好的情况下,统计精度可以达到水平2~5厘米,高程 ...

  9. 为什么vs数据库中文显示问号_本科论文知网不收录为什么会被知网查重到?

    在我们写本科毕业论文之际,很多同学都会借鉴一些参考文献.其中就包括往届师兄师姐的学位毕业论文,参考的最多.随之而来的问题也会很多.学校要进行知网查重,很多同学都会先把一些前辈的论文在知网上检索一遍,发 ...

最新文章

  1. php判断邮箱是否合法性,php验证邮箱地址合法性
  2. nodejs文件服务器断点续传,基于Nodejs的大文件上传之断点续传
  3. OEMAddressTable介绍
  4. Can‘t connect to HTTPS URL because the SSL module is not available
  5. 干货:MySQL 索引原理及慢查询优化
  6. Sql Server 2005如何设置连接加密
  7. mysql安装最后两项无响应,win10下安装mysql8.0.23 及 “服务没有响应控制功能”问题解决办法...
  8. 线性表:3.链表,单链表详解与C语言实现
  9. xargs命令_Linux xargs命令:一个给其他命令传递参数的过滤器
  10. android 进程(复习)
  11. Python : bitcoin库
  12. uandroidtool使用教程_apktool反编译详细使用教程_图文教程
  13. 【原创】Web前端性能优化思维导图
  14. cad插入块_CAD制图初学入门:CAD软件中属性定义的相关应用
  15. 数据库关系代数表达式
  16. 推荐个软件EveryThing(可以快速找到电脑里的各种东西)
  17. Boot Loader点点滴滴(转)
  18. 膳食营养与健康类毕业论文文献都有哪些?
  19. 专题一:Labview表格控件 及 应用(二)
  20. 多项目同时进行如何做好进度管理

热门文章

  1. shell编程中date用法(转)
  2. Bash判断文件夹(目录)是否存在
  3. 使用重定向的输入和输出创建子进程
  4. 设计模式-Singleton
  5. windows下apache+php+mysql 环境配置方法
  6. 拼接SQL的一个技巧
  7. Vagrant 快速入门
  8. “制造商和技术支持商”
  9. Difference between CGLIB JDK Dynamic Proxies
  10. 面向对象设计启发规则