- 实验要求
了解数据在机器中的存放方式。
- 实验结果与分析
- 设计一个程序以检查你的机器是大端方式还是小端方式。
Big endian大端和Little endian小端的区别体现在对数据的存储和读取方式,大端方式将数据低位保存在内存的高位,小端模式则将数据高位保存在内存高位。因此只要知道储存数据的内存最低一位(或最高位)中保存的是否数据低位,就能判断是否为小端(或大端)存储。故代码如下,为int型数据赋值,注意要是该数每个byte存储的数据有区别,十六进制下该数每两位应不相同,例如0x0a0b0c0d。然后考虑读取内存中最低一位byte数据,把该数据的存储位置赋给字符指针,使字符指针指向该数存储位置开端即低位。再将该指针对应字符转换为整型数据与原数高位和低位对比即可。
图表 1判断大端、小端实现代码
结果如下
图表 2输出结果
故我的电脑是大端方式。
-
- 设计一个程序以检查内存变量(如结构或数组)是否按边界对齐。
图表 3定义结构体输出占用内存
图表 4运行结果
结构体node空间占用如下表(每格表示1byte)
结构体test空间占用如下表(每格表示1byte)
故可以得知编译器自动对齐内存边界。
- 实验小结
图表 5结构体定义
定义如上结构体,下讨论该结构体占用内存为24byte而非20byte。
先假设该结构体占用空间如下表,占用20byte。
考虑连续写入(或从内存中读取)两个上述结构体,有
假设第一个结构体中c存储起始位置为a,d的起始存储位置为a+28,无法被8整除,与边界对齐要求矛盾。
上述结构体正确的占用空间为:
占用空间为24byte。
图表 6验证结果