linux tricks 之数据对齐。
1 include/linux/kernel.h 2 #define USHORT_MAX ((u16)(~0U)) 3 #define SHORT_MAX ((s16)(USHORT_MAX>>1)) 4 #define SHORT_MIN (-SHORT_MAX - 1) 5 6 #define INT_MAX ((int)(~0U>>1)) 7 #define INT_MIN (-INT_MAX - 1) 8 #define UINT_MAX (~0U) 9 10 #define LONG_MAX ((long)(~0UL>>1)) 11 #define LONG_MIN (-LONG_MAX - 1) 12 #define ULONG_MAX (~0UL) 13 14 #define LLONG_MAX ((long long)(~0ULL>>1)) 15 #define LLONG_MIN (-LLONG_MAX - 1) 16 #define ULLONG_MAX (~0ULL)
内核通过C语言的强制转换来实现,首先定义无符号数的最大值,比如USHORT_MAX。然后去掉符号位可以得到该类型有符号的最大值,而最小值的绝对值则比最大值的大1,所以通过对有符号的最大值取反减1,就可以得到有符号的最小值。根据这一规则可以很容易写出char类型的相关数据大小。转换的原理从下图中可以更清晰的看出来:
根据Linux对short,int,long以及long long数据类型大小的定义,可以很容易定义出char型的数据大小,示例如下:
1 #include <stdio.h> 2 3 #define UCHAR_MAX ((unsigned char)(~0U)) 4 #define CHAR_MAX ((char)(UCHAR_MAX >> 1)) 5 #define CHAR_MIN (-CHAR_MAX - 1) 6 7 int main() 8 { 9 printf("UCHAR_MAX:\t%u\n", UCHAR_MAX); 10 printf("CHAR_MAX:\t%d\n", CHAR_MAX); 11 printf("CHAR_MIN:\t%d\n", CHAR_MIN); 12 13 return 0; 14 }
得到如下结果:
1 UCHAR_MAX: 255 2 CHAR_MAX: 127 3 CHAR_MIN: -128
转载于:https://www.cnblogs.com/3me-linux/p/6208016.html
linux tricks 之数据对齐。相关推荐
- linux下的数据对齐
数据对齐也就是通过硬件来估算在数据的地址和内存块之间的联系.当一个数被装载进内存,它的内存地址是它的数据大小的倍数,这个就是自然对齐.比如一个32位的数据,他被装载进内存的地址就是4的倍数,也就是地址 ...
- Nginx源码分析--数据对齐posix_memalign和memalign函数
posix_memalign函数() /* * 背景: * 1)POSIX 1003.1d * 2)POSIX 标明了通过malloc( ), calloc( ), 和 re ...
- Linux内核网络数据包发送(三)——IP协议层分析
Linux内核网络数据包发送(三)--IP协议层分析 1. 前言 2. `ip_send_skb` 3. `ip_local_out` and `__ip_local_out` 3.1 netfilt ...
- 【转】彻底搞清计算结构体大小和数据对齐原则
数据对齐: 许多计算机系统对基本数据类型合法地址做出了一些限制,要求某种类型对象的地址必须是 某个值K(通常是2,4或8)的倍数.这种对齐限制简化了形成处理器和存储器系统之间的接口的硬件 设计.例如, ...
- gcc数据对齐之: howto 2.
原文链接:http://www.catb.org/esr/structure-packing/ 谁应阅读本文 本文探讨如何通过手工重新打包C结构体声明,来减小内存空间占用.你需要掌握基本的C语言知识, ...
- Linux 系统挂载数据盘
Linux 系统挂载数据盘: 适用系统:Linux(Redhat , CentOS,Debian,Ubuntu) * Linux的云服务器数据盘未做分区和格式化,可以根据以下步骤进行分区以及格式 ...
- Linux下的数据备份工具rsync
Linux下的数据备份工具很多,用得最多的是rsyns(远程同步) 同步远程数据类似scp 同步本地数据类似cp root@ip-172-31-8-212:~# rsync /etc/passwd / ...
- 内存对齐/字节对齐/数据对齐/地址总线对齐
其实是使用InitializeAcl()时发现有个aligned,可我不知道什么是aligned 于是乎我就先搜索了对齐,结果发现了一大堆,什么[字节对齐].[内存对齐].[地址总线 对齐].[数据对 ...
- MediaCodec 解码后数据对齐导致的绿边问题
前言 本文从简书迁移,原文地址:www.jianshu.com/p/ac53e9595- Android 使用 MediaCodec 解码 h264 数据后会有个数据对齐的问题. 简单说就是 Medi ...
- Linux系统捕获数据包流程
Linux系统捕获数据包流程 为了提高数据包的捕获效率,瓶颈问题是一个需要非常关注的焦点.减少在捕获数据包过程中的瓶颈,就能够提高数据包捕获的整体性能.下面本文将以Linux操作系统为平台,分析捕获数 ...
最新文章
- 内核数据结构之红黑树
- 武汉网络推广介绍如何通过简化标题来提升主关键词排名?
- 【Visual C++】游戏开发笔记二十一 游戏基础物理建模(三) 摩擦力系统模拟
- java类加载器_类加载器
- 用函数求C15的值C语言,南开19春学期(1503、1509、1603、1609、1703)《C语言程序设计》在线作业-1辅导资料.docx...
- pytorch---张量和自动求导
- 定时任务schedule(spring boot )
- SendMessage,PostMessage
- 局域网攻击之ARP网关欺骗
- 编程:Python实现图片识别
- Art of Problem Solving: Proof without Words
- 软负载均衡和F5负载均衡(硬负载均衡)区别
- docker服务假死解决方案
- 年度盘点 | 2019品牌营销围绕的三个关键词
- 《A fast parallel algorithm for thinning digital patterns》论文算法python代码实现
- 石头机器人拖地水量调节_用石头扫地机器人扫地拖地是一种什么体验
- Qt QString 增、删、改、查、格式化等常用方法总结
- 利用Java抓取网页数据
- 并发-MESI缓存一直协议详解
- 荣耀Play6T配置怎么样 荣耀Play6T值得买吗
热门文章
- linux系统u盘安装7.2,U盘安装CentOS 7系统的方法
- java实践_java基础实践
- mysql优化必知(mysql的语句执行顺序)
- 太原市智能家居行业协会成立
- 使用浏览器去检查exchange 2013 协议的健康状况
- 单个用户OWA登陆失败,提示用户名和密码错误
- SAP QM 可以控制到没有收到Vendor 的certificate的话就不能做UD.
- 细算经典网游私服新作下刀的“手术”
- FreeRTOS的HOOK,以及(23)FreeRTOS 空闲任务分析
- 3月4日 投影变换、仿射、Cross Ratios交比与单目测距、投影变换代码实现logo与球筐融合