您的位置:首页 > 编程语言 > C语言/C++

大小端与内存空间对齐.cpp

2017-01-05 23:03 344 查看
/*查看电脑大小端
 * 大端:低地址存储低位,小端:低地址存储高位
 * */

#include <iostream>
using namespace std;
/*
 联合体的成员变量是共享空间的,其空间大小由最大成员变量决定;
 */
void show1(){
    union A{
        int a;
        char c[4];
    };
    struct B{
        int a;
        char b;
        double c;
        char d;
        char e[10];
        short f;
    };
    cout << "sizeof union : " << sizeof (union A) << endl;
//查看A的空间,由于其空间取决于最大的成员,故结果为4
    cout << "sizeof struct : " << sizeof(struct B) << endl;
//查看B的空间,由于32位指令周期为4个字节(32位),即CPU一次最大可读取4字节,所以内存在优化时将和小于4字节的成员按照4字节计算,将大于4字节的拆分为4字节的整数倍,所以B的算法为 4 + 4 + 8 + 12 + 4 = 32 ,这个也是32位机指针为4个字节,64位机指针为8字节的原因
    union A k;
    k.a = 0x12345678;
    //数组第一位为低地址
    if(k.c[0] == 0x78)
        cout << "小端" << endl;
    else
        cout << "大端" << endl;
}

void show2(){
    int a = 0x12345678;
    char * p = (char*)&a;
    if(*p == 0x78)
        //指针从低地址走向高地址
        cout << "小端" << endl;
    else
        cout << "大端" << endl;
}

int main()
{
    show1();
    show2();   
    return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: