1.联合体union的基本特性——和struct的同与不同 union,中文名“联合体.共用体”,在某种程度上类似结构体struct的一种数据结构,共用体(union)和结构体(struct)同样可以包含很多种数据类型和变量. 在成员完全相同的情况下,struct比union占用的内存要多一些. 原因是C中struct和union的内存分配机制不同: 在struct中,所有的成员都有自己的存储空间,而且为了便于寻址和管理,所有的数据成员都要遵循内存对齐的规则: 在union中,所有的成员共用一块…
union: 不允许只用联合变量名作赋值或其它操作. 也不允许对联合变量作初始化赋值,赋值只能在程序中进行. 小端存储: 以字节为单位,低存低,高存高. 任何数据在内存中都是以二进制(1或着0)顺序存储的,每一个1或着0被称为1位,而在x86CPU上一个字节是8位.比如一个16位(2字节)的 short int型变量的值是1156,那么它的二进制表达就是:00000100 10000100.由于Intel CPU的架构是Little Endian(小端存储,请参数机算机原理相关知识),所以它是按…
要判定大小端?需要弄清以下几个问题: 1.当一个变量占多个字节时,变量的指针指向的是低地址 2.什么是大小端? 大端模式:是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中. 小端模式:是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中. 3.怎么判断大小端? 总结:(1)本文主要通过   "使用gdb查看变量在内存中的分布 "和 "打印联合体"来确定大小端: (2)另外,gdb 查看内存数,格式: x /nfu n表示要…
两者的区别: 1. 共用体和结构体都是由多个不同的数据类型成员组成, 但在任何同一时刻, 共用体只存放了一个被选中的成员, 而结构体的所有成员都存在.   2. 对于共用体的不同成员赋值, 将会对其它成员重写, 原来成员的值就不存在了, 而对于结构体的不同成员赋值是互不影响的.   1.2 什么是高/低字节 现在我们弄清了高/低地址,接着考虑高/低字节.有些文章中称低位字节为最低有效位,高位字节为最高有效位.如果我们有一个32位无符号整型0x12345678,那么高位是什么,低位又是什么呢? 其…
union 关键字(主要用来压缩空间,如果一些数据不可能同一时间同时用到,可是考虑使用union) union关键字声明的变量称之为联合体变量: (1)联合体变量只配置一个足够大的空间来容纳最大长度的数据成员, (2)联合体中的数据共享一块空间,同一时间只能存储其中的一个数据成员, (3)联合体的所有数据成员拥有相同的起始地址. 例如: union date { char a; int b; double c; } 2.大小端模式 大端模式:数据的高字节存储在低地址,低字节在高地址 小端模式:数…
union 关键字的用法与struct 的用法非常类似. union 维护足够的空间来置放多个数据成员中的“一种”,而不是为每一个数据成员配置空间,在union 中所有的数据成员共用一个空间,同一时间只能储存其中一个数据成员,所有的数据成员具有相同的起始地址.例子如下: union StateMachine {    char character;    int number;    char *str;    double exp; }; 一个union 只配置一个足够大的空间以来容纳最大长度…
1. union 关键字 union 维护足够的空间来置放多个数据成员中的“一种”,而不是为每一个数据成员配置空间,在 union 中所有的数据成员共用一个空间,同一时间只能储存其中一个数据成员,所有的数据成员具有相同的起始地址.例子如下: union StateMachine { char character; int number; char *str; double exp; }; 一个 union 只配置一个足够大的空间以来容纳最大长度的数据成员,以上例而言,最大长度是 double 型…
int checkCPUendian()//返回1,为小端:反之,为大端: { union { unsigned int a; unsigned char b; }c; c.a = 1; return 1 == c.b; } 大端模式(Big-endian),是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放; 小端模式(Little-endian),是指数据的高字节保存在内存的高地…
不同体系结构的CPU,数据在内存中存放的排列顺序是不一样的. 存储器中对数据的存储是以字节(Byte)为基本单位的,因此,字(Word)和半字(Half-Word)在存储器中就有两种次序,分别称为:大端模式(Big Endian)和小端模式(Little Endian). 大端存储模式是指字或半字的最高字节(Most Significant Bit,MSB)存放在内存的最低位字节地址上,而字数据的低字节则存放在高地址中.打个比方,有一个字为0x12345678,这个字由4个字节组成,从高位到低位…
在操作系统中,经常会用到判断大小端,很多面试题中也会经常遇到,以前的时候没有总结过,这里总结一下. 以后用到了就直接可以用了. 所谓的大小端,大致的解释意思就是: [大端模式] CPU对操作数的存放方式是高地址存放低位,低地址存放高位. [小端模式]CPU对操作数的存放方式是高地址存放高位,低地址存放低位. 大多数ARM处理器都是采用的小端模式,PowerPC是采用的大端模式,网络字节序是采用的大端模式. 常用的有两种方式来判断大小端,一种是使用C语言中的联合体,具体代码如下: int chec…