C/C++中基本数据类型所占内存大小

scorlw 发布于

C/C++中基本数据类型所占内存大小

c++

C中不同数据类型所占的字节大小,在不同的操作系统和编译器下,是不同的,一般主要说gcc下,32位或64位系统的,做了个表如下:

数据类型 32位 64位 取值范围(32位)
char 1 1 -128~127
unsigned char(当byte使用) 1 1 0~255
short int /short 2 2 –32,768~32,767
unsigned short 2 2 0~65,535
int 4 4 -2,147,483,648~2,147,483,647
unsigned int 4 4 0~4,294,967,295
long int /long(不同) 4 8 –2,147,483,648~2,147,483,647
unsigned long(不同) 4 8 0~4,294,967,295
long long int/long long 8 8 -9,223,372,036,854,775,808 ~9,223,372,036,854,775,807
指针 (不同) 4 8
float 4 4 3.4E +/- 38 (7 digits)
double 8 8 1.7E +/- 308 (15 digits)

注意:

  1. 求数组大小时,如果数组作为参数传递时,退化为指针,所以sizeof(arr)大小为该系统下指针的大小

  2. 对于C字符串,需要牢记C/C++中一个汉字占两个字节(Linux下3个字节)。

  3. 求struct 或者 class 的大小时候,除了基本的数据类型大小,特别要考虑的是字节对齐问题,如果是C++的还涉及虚函数的虚表问题,需要加上虚表指针的大小。

原文地址:https://blog.csdn.net/zcyzsy/article/details/77935651?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param