zoukankan      html  css  js  c++  java
  • c++ 内存对齐规则及例子

    sizeof() 输出值是多少?面试中也是经常会问到的,这里又了解了内存对齐的原则,作个记录。

     1 #include <iostream>
     2 using namespace std;
     3 
     4 //内存对齐的规则:
     5 //默认条件下,内存对齐是以class/struct中最大的那个基本类型为基准的(x倍数),如果class/struct中有自定义类型,则递归的取其中最大的基本类型来参与比较
     6 
     7 struct A{
     8     char a;
     9     int b;
    10     short c;
    11 };
    12 
    13 struct B{
    14     short c;
    15     char a;
    16     int b;
    17 };
    18 
    19 class BigData
    20 {
    21     char array[33];
    22 };
    23 
    24 class Data
    25 {
    26     BigData bd;
    27     int integer;
    28     double d;
    29 };
    30 
    31 //静态变量和静态函数不占有类的内存空间,它们只是作用域在类中,还有成员函数也占有类的内存空间
    32 class C{
    33 public:
    34   // void test1()
    35   // {
    36   //     cout << "This is test1()" << endl;
    37   // }
    38   virtual void test2()
    39   {
    40       cout << "This is test2()" << endl;
    41   }
    42   static void test3()
    43   {
    44       cout << "This is test3()" << endl;
    45   }
    46 private:
    47   static int a;
    48   int b;
    49 };
    50 
    51 
    52 
    53 int main(){
    54   C c;
    55   cout << "sizeof(c) = " << sizeof(c) << endl;
    56 
    57   cout << "sizeof(A) = " << sizeof(A) << endl;
    58   cout << "sizeof(B) = " << sizeof(B) << endl;
    59 
    60   cout << sizeof(BigData) << "   " << sizeof(Data) << endl;
    61 
    62 }
    63 
    64 
    65 /*x64 gcc编译下
    66 输出:
    67 sizeof(c) = 16
    68 sizeof(A) = 12
    69 sizeof(B) = 8
    70 33   48
    71 */

    这里给两个链接做参考:

    为什么要进行内存对齐以及对齐规则

    C/C++ 内存对齐原则及作用

  • 相关阅读:
    HDOJ.1029 Ignatius and the Princess IV(map)
    STL之map
    STL之map
    UVA.1584 环状序列
    UVA.1584 环状序列
    AOJ. 数组训练.2016-11-17
    AOJ. 数组训练.2016-11-17
    AOJ.592 神奇的叶子
    AOJ.592 神奇的叶子
    技能书
  • 原文地址:https://www.cnblogs.com/Hwangzhiyoung/p/9341540.html
Copyright © 2011-2022 走看看