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

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

数据类型32位64位
char*48
char11
short22
int44
long48
long long88
float44
double88

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

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

可能原因: 难道MinGW 64编译器 对数据类型长度有 优化?
近期看到一篇公众号说的:如果没有特别指定额外编译参数,默认编译都是以32位为准,该种默认规则是为了增加程序在x64/x86系统的兼容性。

/**
 * @file test_zeroarray.c
 * @author your name (you@domain.com)
 * @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();
}

运行结果:

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值