32位 64位 数据类型差异疑惑

在网上查找的 32位和64位系统 中,数据类型所占字节数目如下表所示:

数据类型 32位 64位
char* 4 8
char 1 1
short 2 2
int 4 4
long 4 8
long long 8 8
float 4 4
double 8 8

由上图可以得出,32位和64位的数据类型所占字节长度差异主要体现于指针long
但是,今天编写代码中,发现64位系统的long长度也为4,产生疑惑中。。。

  • 测试系统:Win10 64位
  • 编译器:MinGW 64

可能原因: 难道MinGW 64编译器 对数据类型长度有 优化?

/**
 * @file test_zeroarray.c
 * @author your name ([email protected])
 * @brief 测试64位 操作系统 各种数据类型 所占字节数
 * @version 0.1
 * @date 2019-09-25
 * 
 * @copyright Copyright (c) 2019
 * 
 */

#include <stdio.h>
#include <stdlib.h>

typedef int comm_dev_id_t;

#pragma pack(1) ///< 1字节对齐
/**
 * @brief 自定义结构体
 * 
 */
typedef struct comm_dev_info
{
    comm_dev_id_t dev_id;  ///< 通信设备id
    char* name;  ///< 通信设备名称
} comm_dev_info_t;

/**
 * @struct自定义结构体
 * 
 */
typedef struct sys_comm_dev_mannage
{
    char buf[2];
    comm_dev_info_t comm_dev_info_array;
}sys_comm_dev_mannage_t;

/**
 * @brief 主函数
 * 
 * @return int  无意义
 */
int main(void)
{
    printf("sizeof(char*) = %d\n", sizeof(char*));

    printf("sizeof(char) = %d\n", sizeof(char));
    printf("sizeof(short int) = %d\n", sizeof(short int));
    printf("sizeof(int) = %d\n", sizeof(int));
    printf("sizeof(long) = %d\n", sizeof(long));
    printf("sizeof(long long) = %d\n", sizeof(long long));
    
    printf("sizeof(float) = %d\n", sizeof(float));
    printf("sizeof(double) = %d\n", sizeof(double));

    printf("sizeof(comm_dev_info_t) = %d\n", sizeof(comm_dev_info_t));
    printf("sizeof(sys_comm_dev_mannage_t) = %d\n", sizeof(sys_comm_dev_mannage_t));
    printf("%x\n", (char*)&((sys_comm_dev_mannage_t *)0)->comm_dev_info_array);
    getchar();
}

运行结果:

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44347452/article/details/101389278