程序的可移植性——字长/不透明数据/数据对齐/大小端
来源:互联网 发布:淘宝店招设计素材 编辑:程序博客网 时间:2024/05/16 07:41
字长
能被系统一次处理完的数据就是字,而字长根据不同系统而不同,32位系统字长就是32bit,4个字节。
不透明数据
为了方便移植,需要屏蔽底层数据字长对系统上层的设计的影响,因此用typedef对不同数据进行重命名。被typedef重命名的数据就是不透明数据。例如进程标识符pid_t,实际上是int型。定义在include/linux/types.h
/
能被系统一次处理完的数据就是字,而字长根据不同系统而不同,32位系统字长就是32bit,4个字节。
不透明数据
为了方便移植,需要屏蔽底层数据字长对系统上层的设计的影响,因此用typedef对不同数据进行重命名。被typedef重命名的数据就是不透明数据。例如进程标识符pid_t,实际上是int型。定义在include/linux/types.h
/
* bsd */typedef unsigned char u_char;typedef unsigned short u_short;typedef unsigned int u_int;typedef unsigned long u_long;/* sysv */typedef unsigned char unchar;typedef unsigned short ushort;typedef unsigned int uint;typedef unsigned long ulong;#ifndef __BIT_TYPES_DEFINED__#define __BIT_TYPES_DEFINED__typedef __u8 u_int8_t;typedef __s8 int8_t;typedef __u16 u_int16_t;typedef __s16 int16_t;typedef __u32 u_int32_t;而__u8之类的数据定义在:~/linuxKernel/linux-2.6.34$ vim include/asm-generic/int-ll64.h
typedef unsigned char __u8;typedef __signed__ char __s8;typedef __signed__ short __s16;typedef unsigned short __u16;typedef __signed__ int __s32;typedef unsigned int __u32;#ifdef __GNUC____extension__ typedef __signed__ long long __s64;__extension__ typedef unsigned long long __u64;#elsetypedef __signed__ long long __s64;typedef unsigned long long __u64;
数据自然对齐
数据自然对齐,就是一个数据的存储地址刚好是它长度的整数倍。例如,4个字节的数据,存放地址刚好是4字节的整数倍。如5个字节大小的数据,其地址刚好是5字节的倍数。对于系统性能来说很重要,有些系统能自动系统对齐,但是牺牲了系统性能,所以,程序员最好能在设计的时候就手动对齐数据。移植系统需要考虑大小端,不同系统不一致,测试大小端程序如下。
调试时候遇到问题:
1.打印16进制,要用%x,%d是打印十进制,显示结果不一样。
2.if比较时,记得是0x12,十六进制比较,不要写成十进制:12。
#include <stdio.h>typedef unsigned int word;typedef unsigned char byte;int main(){ word val_32bit = 0x12345678; byte val_8bit =*((byte*)(&val_32bit)); printf("val_8bit = %x\n",val_8bit); if(val_8bit==0x12){ printf("big end\n"); } else { printf("little end\n"); } return 0;}
0 0
- 程序的可移植性——字长/不透明数据/数据对齐/大小端
- 数据对齐 & 结构体的大小
- 嵌入式系统程序可移植性设计及性能优化之二――数据结构设计
- 嵌入式系统程序可移植性设计及性能优化之二 --数据结构设计
- 自定义类型变量的大小(数据对齐)
- chrome 中在栈上创建指定字节对齐的POD类型的static数据的一种可移植的方法
- 关于程序可移植性的问题
- 软件程序的可移植性
- 如何提高程序的可移植性
- 如何提高程序的可移植性
- C 程序的可移植性
- java程序的可移植性
- struct union数据对齐和sizeof大小
- 数据的对齐
- 数据对齐的解释
- 眼中的数据对齐
- 能对齐的数据
- 数据存储的大小端
- php 常用正则表达式
- HDU(1849)Rabbit and Grass(博弈)
- Action层代码封装模板
- HDU(2188)悼念512汶川大地震遇难同胞——选拔志愿者
- FZU Problem 1534 阿甘的珠宝 (博弈)
- 程序的可移植性——字长/不透明数据/数据对齐/大小端
- HDU(1536)S-Nim (博弈)
- HDU(1867)A + B for you again (KMP)
- Codeforces Round #106 (Div. 2) 149/E E. Martian Strings
- HDU(4522) 湫湫系列故事——过年回家
- HDU(2955)Robberies (0-1背包)
- Codeforces Round #226 (Div. 2)B. Bear and Strings
- Codeforces Round #226 (Div. 2)A. Bear and Raspberry
- 黑马程序员---高新技术之javabean和泛型