C++中32位和64位的数据长度

以代码为例子:

#include <iostream>

using namespace std;

int main()
{
    //32位和64位系统在Windows下基本数据类型的大小都是一样的。
    //只有指针的大小不一样!32位指针大小为4byte,而64位的指针大小为8byte。
    cout << "****************64位****************" << endl;
    cout << " " << endl;
    cout << "****************基本数据类型的长度****************" << endl;
    cout << "sizeof(char):" << sizeof(char) << endl;//1
    cout << "sizeof(short):" << sizeof(short) << endl;//2
    cout << "sizeof(int):" << sizeof(int) << endl;//4
    cout << "sizeof(long):" << sizeof(long) << endl;//4
    cout << "sizeof(long long):" << sizeof(long long) << endl;//8
    cout << "sizeof(unsigned int):" << sizeof(unsigned int) << endl;//4
    cout << "sizeof(float):" << sizeof(float) << endl;//4
    cout << "sizeof(double):" << sizeof(double) << endl;//8
    cout << " " << endl;
    cout << "****************指针的数据长度****************" << endl;
    void* pointer;
    cout << "sizeof(pointer):" << sizeof(pointer) << endl;//32 - 4 64 - 8
    struct Student{      //声明一个结构体类型Student
        int num;         //声明一个整形变量num
        char name[20];   //声明一个字符型数组name
        char sex;        //声明一个字符型变量sex
        int age;         //声明一个整形变量age
        float score;     //声明一个单精度型变量
        char addr[30];   //声明一个字符型数组addr
    };
    cout << " " << endl;
    cout << "****************结构体的长度****************" << endl;
    //在结构中各成员有各自的内存空间, 一个结构变量的总长度是各成员长度之和(空结构除外,同时不考虑边界调整)。
    Student student1;// 定义结构体类型变量student1
    cout << "sizeof(Student):" << sizeof(Student) << endl;//68
    cout << "sizeof(student1):" << sizeof(student1) << endl;//68
    cout << "sizeof(student1.num):" << sizeof(student1.num) << endl;//4
    cout << "sizeof(student1.name):" << sizeof(student1.name) << endl;//20
    cout << "sizeof(student1.sex):" << sizeof(student1.sex) << endl;//1
    cout << "sizeof(student1.age):" << sizeof(student1.age) << endl;//4
    cout << "sizeof(student1.score):" << sizeof(student1.score) << endl;//4
    cout << "sizeof(student1.addr):" << sizeof(student1.addr) << endl;//30
    cout << " " << endl;
    cout << "****************union的长度****************" << endl;
    union U1 {
        int a;
        char b;
        int c[8];
        char d[5];
        char *p1;
        int *p2;
        void *p3;
    };
    U1 u1;
    //在“联合”中,各成员共享一段内存空间, 一个联合变量的长度等于各成员中最长的长度。
    //应该说明的是, 这里所谓的共享不是指把多个成员同时装入一个联合变量内,
    //而是指该联合变量可被赋予任一成员值,但每次只能赋一种值, 赋入新值则冲去旧值。
    cout << "sizeof(U1):" << sizeof(U1) << endl;//32
    cout << "sizeof(u1.a):" << sizeof(u1.a) << endl;//4
    cout << "sizeof(u1.b):" << sizeof(u1.b) << endl;//1
    cout << "sizeof(u1.c):" << sizeof(u1.c) << endl;//32
    cout << "sizeof(u1.d):" << sizeof(u1.d) << endl;//5
    cout << "sizeof(u1.p1):" << sizeof(u1.p1) << endl;//32 - 4 64 - 8
    cout << "sizeof(u1.p2):" << sizeof(u1.p2) << endl;//32 - 4 64 - 8
    cout << "sizeof(u1.p3):" << sizeof(u1.p3) << endl;//32 - 4 64 - 8
    cout << "****************其他****************" << endl;
    int arr[10];
    int *p1 = arr;
    cout << "sizeof(p1):" << sizeof(p1) << endl;//32 - 4 64 - 8
    return 0;
}

实验结果:
32位编译器:
这里写图片描述

64位:
这里写图片描述

由此可见:指针的长度不同,32 - 4 ,64 - 8
struct 的长度为和
union的长度为:
1)大小足够容纳最大的成员;
2)大小能被其包含的所有基本数据类型的大小所整除。

例如:

union U2 {
        int a;
        char b;
        char d[33]  ;
        void *p;
   };
   cout<< "sizeof(U2):"<<sizeof(U2)<<endl;//36

实验结果
32位:

sizeof(U2):36
64位:
sizeof(U2):40

结果分析:
32位:最大成员 char d[33],长度为33,其他成员的长度分别为4,1,4,因此U2的长度需>=33且能被1,4整除,因此结果为36。
32位:最大成员 char d[33],长度为33,其他成员的长度分别为4,1,8,因此U2的长度需>=33且能被1,4,8整除,因此结果为40。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值