• c++中各类型数据占据的字节长度


    c++中各种类型数据类型占据字节长度

    首先罗列一下C++中的数据类型都有哪些:

    1、整形:int、long

    2、字符型:char、wchar_t

    3、布尔型:bool

    4、浮点型:float、double

    5、指针

    一、整形

      int占据操作系统一个内存单元的大小。long跟int相同

      早先16位操作系统一个内存单元是16位,所以是2个字节;32位系统一个内存单元是是32位,所以是4字节;64位操作系统一个内存单元是16位,故占8个字节。

    二、字符型

      char类型通常占据一个字节,对于用于扩展字符集的wchar_t类型,需要占据两个字节。

    三、布尔型

      bool占据一个字节

    四、浮点型

      float占据4个字节,double是float的两倍即8个字节

    五、指针

      指针字节长度计算原理其实跟int差不多,一个指针的位数和操作系统的位数是相等的,即32位系统应该是4个字节,64位系统应该是8个字节。

    代码如下

    1 #include<iostream>                                                     
     2
     3 using namespace std;
     4
     5 int main()
     6 {
     7     int a;
     8     long b;
     9     char c;
    10     wchar_t d;
    11     bool e;
    12     float f;
    13     double g;
    14     int*p= &a;
    15
    16     cout << sizeof(a) << endl;
    17     cout << sizeof(b) << endl;
    18     cout << sizeof(c) << endl;
    19     cout << sizeof(d) << endl;
    20     cout << sizeof(e) << endl;
    21     cout << sizeof(f) << endl;
    22     cout << sizeof(g) << endl;
    23     cout << sizeof(p) << endl;
    24 }


    结果如下

    qqtsj@qqtsj-Nitro-AN515-51:~/cpp$ g++ -o size1 size1.cpp
    qqtsj@qqtsj-Nitro-AN515-51:~/cpp$ ./size1
    4
    8
    1
    4
    1
    4
    8
    

    字节对齐,代码如下

     1 #include<iostream>
     2 
     3 using namespace std;
     4 
     5 struct A
     6 {
     7     int a;
     8     char b;
     9     short c;
    10 };
    11 
    12 struct B
    13 {
    14     char a;
    15     int b;
    16     short c;
    17 };
    18 
    19 struct E
    20 {
    21     short a;
    22     char b;
    23     int c;
    24 };
    25 
    26 #pragma pack(2)
    27 struct C
    28 {
    29     char a;
    30     int b;
    31     short c;
    32 };
    33 
    34 #pragma pack(1)
    35 struct D
    36 {
    37     int a;
    38     char b;
    39     short c;
    40 };
    41 
    42 int main(int argc, char ** argv)
    43 {
    44 
    45     cout << sizeof(A) << "   "<< sizeof (B) << "   "<< sizeof (C) << "      "<< sizeof (D) << "  "<< sizeof (E) << endl;                         
    46     return 0;
    47 }
    ~                  

     记录一下如何理解字节对齐,结构体中总是会涉及到字节对齐,很多人都不是很理解,我也一样,今天就一起来解读他。

    1.编译器对字节对齐的一些规则    

      我从下面三条说明了编译器对字节处理的一些原则。当然除了一些特殊的编译器在处理字节对齐的方式也不一样, 这些情况我未碰到过,就不作说明了。

      a. 关于数据类型自身的对齐值,不同类型会按不同的字节来对齐。
    类型 对齐值(字节)
    char 1
    short 2
    int 4
    float 4
    double 4
          b. 类、结构体的自身对齐字节值。对于结构体类型与类对象的对齐原则:使用成员当中最大的对齐字节来对齐。比如在Struct A中,int a的对齐字节为4,比char,short都大,所以A的对齐字节为4
         c. 指定对齐字节值。意思是指使用了宏 #pragma pack(n)来指定的对齐值

         d. 类、结构及成员的有效对齐字节值。有效对齐值=min(类/结构体/成员的自身对齐字节值,指定对齐字节值)。   有效对齐值决定了数据的存放方 式,sizeof 运算符就是根据有效对齐值来计算成员大小的。简单来说, 有效对齐其实就是要求数据成员存放的地址值能被有效对齐值整除,即:地址值%有效对齐值=0

    字节对齐一般默认4个字节对齐。字节分配一般以偶数分配。

    32位系统默认4个字节进行对齐,64位系统默认8个字节对齐,

    一个字节占8位。

    例struct A

    int 4个字节

    char 与int 对齐,因为char分配了4个字节,short 2个字节,可以分配到char里面

    因此结构体A就总共分配了8个字节。

    以下的结构体都是这样分析的。

    一个小白的总结

  • 相关阅读:
    黑客术语1
    leetcode笔记--3 Niim game
    台湾ML笔记--1.2 formalize the learning probelm
    台湾ML笔记--1.1什么时候适合使用ML
    leetcode笔记--2 reverse string
    leetcode笔记--1 two-sum
    数据挖掘导论笔记1
    python基础----ipython快捷键
    记录新的开始
    编译器错误消息: CS1617: 选项“6”对 /langversion 无效
  • 原文地址:https://www.cnblogs.com/tanshengjiang/p/11830460.html
Copyright © 2020-2023  润新知