内存对齐

来源:互联网 发布:淘宝商城分销平台 编辑:程序博客网 时间:2024/05/11 11:26



#include "stdafx.h"
#include <iostream>
#include <string.h>
using namespace std;


struct
{
short a1;
short a2;
short a3;
}A;


struct
{
long a1;
short a2;
}B;


int _tmain()
{
int a10 = sizeof(A);//6, short的字长为2
int a11 = sizeof(B);//8, long的字长为4, short为2, 编译器会进行对齐 补足4的整数倍


char *ss1 = "0123456789";
int b1 = sizeof(ss1); //4, 指针的大小为4


char ss2[] = "0123456789";
int b2 = sizeof(ss2); //11


char ss3[100] = "0123456789";
int b3 = sizeof(ss3); //100


int ss4[100];
int a4 = sizeof(ss4);//100


char q1[] = "abc";
int a5 = sizeof(q1);//4


char q2[] = "a\n";
int a6 = sizeof(q2);//3 "a,\n, \0"


char* q3 = "a\n";
int a7 = sizeof(q3);//4


char *str1 = (char *)malloc(100);
int a8 = sizeof(str1);//4


void *str2 = (void *)malloc(100);
int a9 = sizeof(str2); //4


return 0;
}


#include "stdafx.h"
#include <iostream>


using namespace std;


class A1
{
public:
int a;
static int b;//静态变量存放在全局数据区里, sizeof()计算的是栈中分配的大小,则sizeof(A1)为sizeof(int),也就是4


A1();
~A1();
};


class A2
{
public:
int a;
char c;
A2();
~A2();
};


class A3
{
public:
float a;
char c;
A3();
~A3();
};


class A4
{
public:
float a;
int b;
char c;
A4();
~A4();
};


class A5
{
public:
double d;
float a;
int b;
char c;
A5();
~A5();
};
int _tmain()
{
int a1 = sizeof(A1);//4
int a2 = sizeof(A2);//8
int a3 = sizeof(A3);//8 sizeof(float)=4, sizeof(doube) = 8  
int a4 = sizeof(A4);//12
int a5 = sizeof(A5);//24 8 + 4 + 4,char按照double对齐, 为24
int a6 = sizeof(float);
int a7 = sizeof(double);
return 0;
}

0 0
原创粉丝点击