您的位置:首页 > 编程语言 > C语言/C++

c++各类型内存占用大小计算(推荐)

2017-04-26 16:27 281 查看
/*************************

一:整形

      int                      4字节

      long int                 4字节

      short int                2字节

      unsigned int             4字节

      unsigned long int        4字节

      unsigned short int       2字节

二:字符型

      char                       1字节

      unsigned char              1字节

三:浮点型

      float                      4字节

      double                     8字节

      long double                8字节

      unsigned long double       8字节

      unsigned double            8字节

四:字符串型

      string                     16字节

五:指针类型

      所有类型的指针都是 4字节

六:函数

      除了void型。其他都函数占有的字节数等于函数的返回类型所占有的字节数。与函数体内部无关。

如:int fun(){}

      sizeof(fun()) = 4;

      int fun2(){string a;}

      sizeof(fun2()) = 4;

七:结构体、类

      内部各数据类型占用之和,然后取比这个和值最近的4的倍数。(如果本身已经是4的倍数就不用取了)

如:struct fun

    {

      string a;   //16

      char b;     //1。和为17,最近的4的倍数是20,所以sizeof(a) = 20;

    }a;

    struct fun2

    {

      string a;   //16

      char b,c,d;     //3。和为19,最近的4的倍数是20,所以sizeof(b) = 20;

    }b;

八:联合体union

      取其中占有字节数最大的数据类型所占有的字节数。
*************************/

[cpp] view
plain copy

 print?





// 32位系统中C/C++中各种类型int、long、double、char表示范围(最大最小值)  

  

    cout << "type: \t\t" << "************size**************"<< endl;  

    cout << "bool: \t\t" << "所占字节数:" << sizeof(bool);  

    cout << "\t最大值:" << (numeric_limits<bool>::max)();  

    cout << "\t\t最小值:" << (numeric_limits<bool>::min)() << endl;  

    cout << "char: \t\t" << "所占字节数:" << sizeof(char);  

    cout << "\t最大值:" << (numeric_limits<char>::max)();  

    cout << "\t\t最小值:" << (numeric_limits<char>::min)() << endl;  

    cout << "signed char: \t" << "所占字节数:" << sizeof(signed char);  

    cout << "\t最大值:" << (numeric_limits<signed char>::max)();  

    cout << "\t\t最小值:" << (numeric_limits<signed char>::min)() << endl;  

    cout << "unsigned char: \t" << "所占字节数:" << sizeof(unsigned char);  

    cout << "\t最大值:" << (numeric_limits<unsigned char>::max)();  

    cout << "\t\t最小值:" << (numeric_limits<unsigned char>::min)() << endl;  

    cout << "wchar_t: \t" << "所占字节数:" << sizeof(wchar_t);  

    cout << "\t最大值:" << (numeric_limits<wchar_t>::max)();  

    cout << "\t\t最小值:" << (numeric_limits<wchar_t>::min)() << endl;  

    cout << "short: \t\t" << "所占字节数:" << sizeof(short);  

    cout << "\t最大值:" << (numeric_limits<short>::max)();  

    cout << "\t\t最小值:" << (numeric_limits<short>::min)() << endl;  

    cout << "int: \t\t" << "所占字节数:" << sizeof(int);  

    cout << "\t最大值:" << (numeric_limits<int>::max)();  

    cout << "\t最小值:" << (numeric_limits<int>::min)() << endl;  

    cout << "unsigned: \t" << "所占字节数:" << sizeof(unsigned);  

    cout << "\t最大值:" << (numeric_limits<unsigned>::max)();  

    cout << "\t最小值:" << (numeric_limits<unsigned>::min)() << endl;  

    cout << "long: \t\t" << "所占字节数:" << sizeof(long);  

    cout << "\t最大值:" << (numeric_limits<long>::max)();  

    cout << "\t最小值:" << (numeric_limits<long>::min)() << endl;  

    cout << "unsigned long: \t" << "所占字节数:" << sizeof(unsigned long);  

    cout << "\t最大值:" << (numeric_limits<unsigned long>::max)();  

    cout << "\t最小值:" << (numeric_limits<unsigned long>::min)() << endl;  

    cout << "double: \t" << "所占字节数:" << sizeof(double);  

    cout << "\t最大值:" << (numeric_limits<double>::max)();  

    cout << "\t最小值:" << (numeric_limits<double>::min)() << endl;  

    cout << "long double: \t" << "所占字节数:" << sizeof(long double);  

    cout << "\t最大值:" << (numeric_limits<long double>::max)();  

    cout << "\t最小值:" << (numeric_limits<long double>::min)() << endl;  

    cout << "float: \t\t" << "所占字节数:" << sizeof(float);  

    cout << "\t最大值:" << (numeric_limits<float>::max)();  

    cout << "\t最小值:" << (numeric_limits<float>::min)() << endl;  

    cout << "size_t: \t" << "所占字节数:" << sizeof(size_t);  

    cout << "\t最大值:" << (numeric_limits<size_t>::max)();  

    cout << "\t最小值:" << (numeric_limits<size_t>::min)() << endl;  

    cout << "string: \t" << "所占字节数:" << sizeof(string) << endl;  

    // << "\t最大值:" << (numeric_limits<string>::max)() << "\t最小值:" << (numeric_limits<string>::min)() << endl;  

    cout << "type: \t\t" << "************size**************"<< endl;  



看了开始的第一部分,你可能觉得我的称述有问题,因为上面的long int和int大小一样,所以在此做一下解释:

1、关于int 和 long int

(1)在VC下没有区别。两种类型均用4个字节存放数据。
(2)VC是后出的编译器,之前有很多早期的C编译器,在早期编译器下long int占4个字节,int占2个字节。

(3)之所以有“整型”和“长整形”两种不同类型,是C语言在诞生时发明者规定好的,

前者存储的整数的值域小于后者。 

这个问题不用牵肠挂肚,在VC下用谁都可以。

(4)在标准中,并没有规定long一定要比int长,也没有规定short要比int短。
标准时这么说的:长整型至少和整型一样长,整型至少和短整型一样长。
这个的规则同样适用于浮点型long double至少和double一样长,double至少和float一样长。
至于如何实现要看编译器厂商


(5)short<=int<=long
VC里面还有个
long long 是占8个字节的


2、关于long long

(1)long long在win32中是确实存在,长度为8个字节;定义为LONG64。

为什么会出现long int呢,在win32现在系统中,长度为4;在历史上,或者其他某些系统中,int长度为2,是short int。

即便是long long,在TI的有款平台中,长度为5

也就是说,每种类型长度,需要sizeof才知道,如果可能,最好用union看看里面的数据,可以消除一些类型的假象长度。  

(2)visual c++ 6.0中不支持,long long int,是在vc99中添加此功能的,所以我们在vc6.0中编译有long long 的数据时,会出错,但是在VS更高的版本中,是能通过的

ACM题目中“求矩形的个数”那道题,就需要用到long long 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: