Windows系统,VS和GCC下各种数据类型大小的比较

本文对比了VS2015和MinGW64(GCC6.3)两种编译器环境下,32位与64位程序中各种基本数据类型的大小。包括char, pointer, short, int, long, long long, float, double等,并指出在Windows和Linux平台下long类型的大小区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

两个编译器一个是VS2015,一个是MinGW64(GCC6.3)

 

#include <iostream>
using namespace std;

int main()
{
	cout<<"Size of char="<<sizeof(char)<<endl;
	cout<<"Size of pointer="<<sizeof(char*)<<endl;
	cout<<"Size of short="<<sizeof(short)<<endl;
	cout<<"Size of int="<<sizeof(int)<<endl;
	cout<<"Size of long="<<sizeof(long)<<endl;
	cout<<"Size of long long="<<sizeof(long long)<<endl;
	cout<<"Size of float="<<sizeof(float)<<endl;
    cout<<"Size of double="<<sizeof(double)<<endl;
	cout<<"Size of long long="<<sizeof(long long)<<endl;
	return 0;
}


VS编译运行结果:

32位:

Size of char=1
Size of pointer=4
Size of short=2
Size of int=4

Size of long=4
Size of long long=8
Size of float=4
Size of double=8
Size of long long=8

64位:

Size of char=1
Size of pointer=8
Size of short=2
Size of int=4

Size of long=4
Size of long long=8
Size of float=4
Size of double=8
Size of long long=8

 

下面是GCC6.3.0(mingw64),linux下long的大小为:32位程序--4字节,64位程序--8字节,windows不能通过long的大小来判断程序是32位还是64位,这是linux和windows差异之一

 

GCC(mingw64):

32位:

Size of char=1
Size of pointer=4
Size of short=2
Size of int=4

Size of long=4
Size of long long=8
Size of float=4
Size of double=8
Size of long long=8

64位:

Size of char=1
Size of pointer=8
Size of short=2
Size of int=4

Size of long=4
Size of long long=8
Size of float=4
Size of double=8
Size of long long=8

GCC(linux):

32位:

Size of char=1
Size of pointer=4
Size of short=2
Size of int=4

Size of long=4
Size of long long=8
Size of float=4
Size of double=8
Size of long long=8

64位:

Size of char=1
Size of pointer=8
Size of short=2
Size of int=4

Size of long=8
Size of long long=8
Size of float=4
Size of double=8
Size of long long=8

<think>我们正在处理用户关于C++数据类型占用字节数的问题。用户要求一个对照表,并且我们有一些引用资料可以参考。 注意:引用中提到,数据类型大小可能因编译器系统架构(32位/64位)的不同而有所差异。因此,在回答中需要强调这一点。 根据引用[1][2],我们可以整理一个表格。引用[3]提供了更详细的数据类型列表取值范围。 我们将按照以下格式组织答案: 1. 首先说明数据类型大小系统架构编译器影响,通常以64位系统为主流,但也会提及32位系统的差异。 2. 然后以表格形式展示数据类型、在32位系统下的大小、在64位系统下的大小(注意:指针类型在32位64位下不同)。 3. 表格包含的数据类型:bool, char, short, int, long, long long, float, double, long double, 以及指针类型(如char*)void。 4. 注意:引用[3]中提到了long double在IEEE754标准下是10字节,但实际实现中可能不同(如8字节),所以需要说明。 我们将使用markdown表格,并确保独立公式使用$$...$$,行内公式使用$...$。 同时,根据要求,在回答末尾生成相关问题。 注意:引用资料的标识使用[^1][^2][^3]。</think>### C++ 数据类型占用字节数对照表 在 C++ 中,数据类型占用的字节数取决于**编译器位数****操作系统架构**(32位或64位)。以下是常见数据类型的字节数对照表,主要参考 C++11 标准及主流编译器实现: | 数据类型 | 32位系统 | 64位系统 | 取值范围说明 | |------------------------|----------|----------|---------------------------------------| | `bool` | 1 | 1 | `true`/`false` | | `char` | 1 | 1 | -128~127 | | `unsigned char` | 1 | 1 | 0~255 | | `short` | 2 | 2 | -32,768~32,767 | | `unsigned short` | 2 | 2 | 0~65,535 | | `int` | 4 | 4 | -2³¹~2³¹-1 | | `unsigned int` | 4 | 4 | 0~2³²-1 | | `long` | 4 | 8 | 32位:-2³¹~2³¹-1<br>64位:-2⁶³~2⁶³-1 | | `unsigned long` | 4 | 8 | 32位:0~2³²-1<br>64位:0~2⁶⁴-1 | | `long long` | 8 | 8 | -2⁶³~2⁶³-1 | | `unsigned long long` | 8 | 8 | 0~2⁶⁴-1 | | `float` | 4 | 4 | 约 ±3.4e±38 (7位精度) | | `double` | 8 | 8 | 约 ±1.7e±308 (15位精度) | | `long double` | 8/12/16 | 8/16 | 实现相关(通常≥`double`) | | **指针类型** (如 `int*`) | 4 | 8 | 地址空间大小决定 | | `void` | 0 | 0 | 无值类型 | #### 关键说明: 1. **`long` 类型的差异**:在 64 位 Linux/macOS 系统中通常为 8 字节,而在 64 位 Windows 系统中一般为 4 字节(与 `int` 相同)[^1][^2]。 2. **`long double`**:大小由编译器实现决定,常见为 8/12/16 字节(如 GCC 通常为 16 字节,MSVC 为 8 字节)[^3]。 3. **指针类型**:在 32 位系统中固定为 4 字节,64 位系统中固定为 8 字节[^1][^2]。 4. **验证方法**:使用 `sizeof(type)` 运算符可实时获取当前系统的类型大小: ```cpp #include <iostream> int main() { std::cout << "int size: " << sizeof(int) << " bytes\n"; std::cout << "double* size: " << sizeof(double*) << " bytes\n"; return 0; } ``` > ⚠️ **注意事项**: > - 上表基于 x86/x64 架构的通用编译器(GCC/Clang/MSVC) > - 嵌入式平台或特殊架构(如 ARM)可能有不同实现 > - C++ 标准仅规定最小尺寸范围,具体实现由编译器决定[^3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值