【新人c语言强化训练 】 c 语言强化练习2。1 数据对齐

对齐,在定义结构体的时候 是非常要注意的问题, 而且 x86 和ARM的处理方式又不相同。

在对齐的问题的处理上, 又两种方式: 不管他(编译器自动填充,费时间) , 人为填充(空间换时间)

比如下面的例子:思考一下 ,来自 u-boot :

//watchdog 本身没有什么问题, 因为寄存器就是 4个字节连续的。

/* WATCH DOG TIMER (see manual chapter 18) */

typedef struct {

S24X0_REG32 WTCON;

S24X0_REG32 WTDAT;

S24X0_REG32 WTCNT;

} /*__attribute__((__packed__))*/ S24X0_WATCHDOG;

//但是UART 就填充了 , 还要注意endian 的问题, endian的问题, 自己上google学习一下。

/* UART (see manual chapter 11) */

typedef struct {

S24X0_REG32 ULCON;

S24X0_REG32 UCON;

S24X0_REG32 UFCON;

S24X0_REG32 UMCON;

S24X0_REG32 UTRSTAT;

S24X0_REG32 UERSTAT;

S24X0_REG32 UFSTAT;

S24X0_REG32 UMSTAT;

#ifdef __BIG_ENDIAN                 //这都是今后咱们定义板子上的寄存器要注意的问题,所以我说 这种用结构体定义 寄存器的方式不是很稳当 ,有风险。

S24X0_REG8 res1[3];

S24X0_REG8 UTXH;

S24X0_REG8 res2[3];

S24X0_REG8 URXH;

#else /* Little Endian */

S24X0_REG8 UTXH;

S24X0_REG8 res1[3];

S24X0_REG8 URXH;

S24X0_REG8 res2[3];

#endif

S24X0_REG32 UBRDIV;

} /*__attribute__((__packed__))*/ S24X0_UART;      //__attribute__((__packed__)) 事实上加上也是可以的, 因为已经认为填充了, 所以 再 __packed__就没有意义了。

下面是我原来学习的时候 ,总结的一个帖子,你们对照着学习一下 对齐方面的知识 , 以此强化 c 语言编程的能力, 这是 谭浩强 的书里面没有的。

上学的时候, 大家用的是 谭浩强的书 。 因地制宜 , 现在复习这本书肯定是不行了,太初级了。 推荐一本 c primer plus,现在好像是第五版, 我看的时候是第四版 , 不错, 一本大厚书, 基本上都能查到, refer : http://www.china-pub.com/computers/common/info.asp?id=23985

关于对齐本身请参阅我的blog 另一篇文章:

http://blog.chinaunix.net/u/22617/showart_297212.html

转载于:https://blog.51cto.com/axlrose/1292641

【新人c语言强化训练 】 c 语言强化练习2。1 数据对齐[zt]相关推荐

  1. c语言中a lt 1e-9,年9月计算机二级考试C语言强化训练题

    年9月计算机二级考试C语言强化训练题 为了使广大学员在备战计算机二级考试时更快的掌握相应知识点,小编在此精选了计算机二级C语言的练习题供学员参考,大家要抓紧时间备考,祝大家备考愉快,梦想成真. 一.单 ...

  2. 微型计算机输出设备 写出六种,2017计算机一级考试强化训练

    2017计算机一级考试强化训练 随着全国计算机一级考试的到来,很多同学已经在努力地复习了,以下是百分网小编整理的计算机一级考试强化训练,希望同学们好好利用. 1)根据汉字国标GB2312-80的规定, ...

  3. 计算机基础考证强化训练范文,计算机基础知识题强化训练.doc

    计算机基础知识题强化训练 计算机基础知识(单选题) 一般认为,世界上第一台电子数字计算机诞生于______. A.1946年B.1952年C.1959年D.1962年 当前的计算机一般被认为是第四代计 ...

  4. 2022年湖南省高职单招(语文)考试强化训练及答案

    语言知识及运用 1.下列各句中,没有语病的一项是?(B) A.教育在综合国力的形成过程中处于基础地位,国力的强弱越来越多地取决于劳动者素质的提高,取决于各类人才培养的质量与数量. B.学习方法可能因人 ...

  5. c语言测试程序题有难度的,C语言编程训练、测试题库.doc

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp计算机&nbsp>&nbspC/C++资料 C语言编程训练.测试题库.doc162页 本文档 ...

  6. 计算机应用强化训练1,计算机应用基础知识强化训练题

    计算机应用基础知识强化训练题 (3页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 4.9 积分 计算机应用基础知识强化训练题 计算机技术与通信技术的结合使 ...

  7. 教育学和中外教育史--强化训练题

    外国教育史>强化训练题,回帖鼓励哦.     第一章 原始社会的教育 教育怎样产生的?P3-6 教育起源于劳动.劳动为教育的产生提供了必要性:劳动中积累的生产劳动经验的传授.社会生活经验的传递等 ...

  8. 致广大关注《网络规划设计师考试案例梳理、真题透解与强化训练》读者朋友的一封信...

    致广大关注<网络规划设计师考试案例梳理.真题透解与强化训练>读者朋友的一封信 书是人类进步的阶梯,读书是增强个人软实力的佳径. 好读书是你的美德,读好书是你的选择,书好读是我们的承诺! 如 ...

  9. R语言机器学习Caret包(Caret包是分类和回归训练的简称)、数据划分、数据预处理、模型构建、模型调优、模型评估、多模型对比、模型预测推理

    R语言机器学习Caret包(Caret包是分类和回归训练的简称).数据划分.数据预处理.模型构建.模型调优.模型评估.多模型对比.模型预测推理 目录

  10. Facebook 开源聊天机器人Blender,经94 亿个参数强化训练,更具“人情味”

    来源:AI前线 作者 | Kyle Wiggers 编译 | Sambodhi 策划 & 编辑 | 刘燕 不久前,Facebook 开源了号称是全球最强大的聊天机器人 Blender,它标志着 ...

最新文章

  1. 2020年春季学期信号与系统课程作业参考答案-第十次作业
  2. Python动态类和动态方法的创建和调用
  3. [SuperM]Shell编程课堂笔记+PPT总结
  4. 生产环境中,如何防止服务器秘钥被盗取?
  5. 多线程编程2-NSOperation
  6. 第4章 Python 数字图像处理(DIP) - 频率域滤波2 - 复数、傅里叶级数、连续单变量函数的傅里叶变换、卷积
  7. 阿里云 Aliplayer高级功能介绍(四):直播时移
  8. SpringBoot常用注解以及作用
  9. springBoot微信支付(native)基本使用
  10. 聚合直播源码原生播放器php分享,原生聚合直播搭建源码
  11. 一键清理垃圾的bat文件
  12. 中国共用计算机网,《中国公用计算机互联网国际联网管理办法》
  13. 20个常用教育心理学效应
  14. ES3、ES5、ES6、ES2016、ES2017、ES2018、ES2019
  15. rovio环境配置与测试笔记
  16. [bigdata] 基于docker 打开hadoop
  17. 基于anyrtc的sdk实现直播连麦互动
  18. #6279. 数列分块入门 3
  19. 小王梦游记五---最美丽的湖
  20. 模电练习题-多路信号发生器(仿真解答)

热门文章

  1. Julia: wsl ubuntu下安装、vscode及配置profile错误补正
  2. 如何对国内股票的名称进行脱敏(待续)
  3. 踩过坑才懂:如何快速打造技术产品
  4. 【单目标优化求解】基于matlab多阶段动态扰动和动态惯性权重布谷鸟算法求解单目标优化问题【含Matlab源码 1656期】
  5. 【人脸表情识别】基于matlab GUI CNN人脸表情识别【含Matlab源码 787期】
  6. 【车辆计数】基于matlab形态学停车场车辆计数【含Matlab源码 628期】
  7. 【三维路径规划】基于matlab蚁群算法三维路径规划【含Matlab源码 179期】
  8. 【三维路径规划】基于matlab蚁群算法水下潜器三维路径规划【含Matlab源码 043期】
  9. 2中我建的表怎么是小写的_面试官:2个线程交替打印大小写英文字母,你会怎么实现?...
  10. 随笔记--Pycharm中Terminal字体大小的设置