__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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/467438.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

跟几位大佬共进晚餐

这是一篇几个程序员大佬聚会的聚后感文章这次聚会比较唐突,连总从广州专门开车来深圳看望我们,我们约在了某个地铁站的八合里牛肉火锅店,这是一个周五的下午,理论上是非常简单的一个周五,但是因为这些男人女人的存在&a…

vue.js框架搭建

安装脚手架 前提条件:已安装node(4.0版本以上),npm a、全局安装 vue-cli npm install -g vue-cli 安装成功后可以通过命令行查看版本号,如图 b、初始化项目 新建一个文件夹命名为01vue,准备在此文件夹下存放…

oracle数据库imp导入,imp 导入 没有数据库

IMP-00009: 导出文件异常结束今天准备从生产库向测试库进行数据导入,结果在imp导入的时候遇到“ IMP-00009:导出文件异常结束” 错误,google一下,发现可能有如下原因导致imp的数据太大,没有写buffer和commit两个数据库字符集不同从…

MIK C语言面试两题

这是一个读者朋友在知识星球上提到的两个笔试题,第一个题目比较简单,关键在第二个题目「编程题」,我文章中写的解题思路应该不是最好的,希望大神读者们给出更好的答案,让这个充满乐趣的程序世界再增添一些乐趣吧&#…

看看大疆的C语言面试题

惯例,这笔试题也是一个读者朋友发给我的,简单看了下,并不觉得这是一个非常困难的题目,最近是校招准备的时候,很多人给我说发面试题对大家有帮助。这个题目面试官强调了这个跑在64位系统下。代码如下:#define mal(x,y) …

RocketMQ实战(一)

阿里巴巴有2大核心的分布式技术,一个是OceanBase,另一个就是RocketMQ。在实际项目中已经领教过RocketMQ的强大,本人计划写一个RocketMQ实战系列,将涵盖RocketMQ的简介,环境搭建,初步使用、API详解、架构分析…

C面试总结文档

最近很多人有参加面试,面试就避免不了笔试,嵌入式面试的话,避免不了C语言,所以给大家准备了两份pdf C语言面试总结的文档。在本公众号回复 「C面试」获取pdf下载链接推荐阅读:专辑|Linux文章汇总专辑|程序人生专辑|C语…

程序员到底怎么了

我们是这样的一群人:每天都在“努力”的工作着,每天都和计算机打交道,泡在网上,打游戏,查资料,发微博。可是有一天,突然意识到,我们的未来在哪里,每个月那点可怜的工资&a…

来看看比尔盖茨当年写的BASIC解释器源代码吧,你就知道泰勒级数有什么用了...

几年前当我刚上大学那会,我曾经问过我一位学计算机同学的一个问题:计算机是如何计算诸如 或者 这种运算的?当初这个问题曾经困扰了我好长时间,这个问题并非是我当年在微积分课堂上解决的,而是直到我后来接触编程后才彻…

手机可以连接多少个蓝牙设备?

这是一个课题研究,蓝牙的东西我们可以先不说,我们讨论一个产品需求。我经常遇到一个场景,就是我用我的手机连上TWS蓝牙耳机听音乐,然后呢,我没有开车,我下地铁的时候,我需要打开我的手机&#x…

Spring简洁总结

Spring简洁总结 要的对象不是自己建的,而是IOC容器(XML文件)给的,我们通过getbean来调用。 依赖注入的话就是对象(bean)的成员的赋值不是我们手动完成,而是容器(XML文件)…

抽象工厂的应用

抽象工厂的应用本文是描述了自己对设计模式的工厂的了解.肯定有错误和不足的地方,希望大家能给予支持和建议. 1.问题的引出在前面的Post中,我描述了.NET的反射在软件设计中的应用.当这篇Post发表之后,有人认为用工厂来实现更合理一些。在这篇Post里&…

一口气搞懂「文件系统」,就靠这 25 张图了

前言不多 BB,直接上「硬菜」。正文文件系统的基本组成 文件系统是操作系统中负责管理持久数据的子系统,说简单点,就是负责把用户的文件存到磁盘硬件中,因为即使计算机断电了,磁盘里的数据并不会丢失,所以可…

Samba远程代码执行漏洞(CVE-2017-7494)复现

简要记录一下Samba远程代码执行漏洞(CVE-2017-7494)环境搭建和利用的过程,献给那些想自己动手搭建环境的朋友。(虽然已过多时) 快捷通道:Docker ~ Samba远程代码执行漏洞(CVE-2017-7494) 演 示:服务器版“永恒之蓝”高危预警 &#xff0…

你说,辽宁输在哪了?

今晚看完了整场比赛,比赛很激烈,有完美的地方,也有不完美的地方看完比赛后,我一个刚从美国回来,现在在凤凰山脚下隔离的同学发消息给我说 「怎么才打三场就拿了总冠军了」?说下比赛整场比赛,辽宁…

[导入]Gemini翻譯為中文時的注意事項

1. 一般檔案 *.aspx, *.ascx 在翻譯為繁體中文或簡體中文後都要儲存為ANSI格式,不可用UTF-8,不然會亂碼,繁體轉簡體也有問題 2. Template中信件的樣版檔案 *.vm ,反而要另存為 UTF-8 格式,不然收到的信會是亂…

答应了好久的camera资料

之前是在知识星球上,有好几个同学问了camera的资料,我简单的说了下,也送了些资料,然后微信好友又有人问,我觉得camera这个,应该是要发一次资料了。之前写过的关于camera的文章安卓camera总体框架Camera摄像…

第九周学习

20162310林臻 《程序设计与数据结构》第九周学习总结 教材学习内容总结 堆的学习及其方法的应用堆排序利用堆的基本特征对一组元素进行排序 教材学习中的问题和解决过程问题1:堆和二叉树有什么区别呢问题1解决方案:1、堆是一个完全二叉树,并且…

Linux kernel同步机制

在现代操作系统里,同一时间可能有多个内核执行流在执行,因此内核其实像多进程多线程编程一样也需要一些同步机制来同步各执行单元对共享数据的访问,尤其是在多处理器系统上,更需要一些同步机制来同步不同处理器上的执行单元对共享…

10大黑客专用的 Linux 操作系统,你了解哪些?

今天列出一些最常用、最受欢迎的Linux发行版来学习黑客和渗透测试。1. Kali LinuxKali Linux是最著名的Linux发行版,用于道德黑客和渗透测试。Kali Linux由Offensive Security开发,之前由BackTrack开发。Kali Linux基于Debian。它带有来自安全和取证各个…