C++的内存结构

 

今天看了一下《C++应用程序性能优化》一书,看完了第一章,感觉挺不错的,有点相见恨晚的感觉。刚开始学C++的时候,我几乎不对内存进行直接操作,连指针都尽量避开。因为这些东西确实挺复杂的。学了汇编以及一些硬件的知识之后,感觉自己在这个层次上有一点提升了,就想着去了解一下C++更深层次的一些东西。

首先困扰我的就是类和结构体的内存分配问题,经过了那么久的学习,总算感觉有些懂了,在这里做点笔记。

分析一下下面段C++代码:

#include "stdio.h"

int g_global;

class A
{
public:
int a;
A(){};
virtual ~A(){printf("A is free/n");};
};
class B
{
public:
int b;
B(){};
virtual ~B(){printf("B is free/n");};
};

class C:public A,B
{
public:
int c;
static int d;
C(){};
virtual ~C(){printf("C is free/n");};
};

void main()
{
static int s_val0;
char* str = "ok";
int val;

A a;
B b;
C c;

printf("---------val memory-----------/n");
printf("g_global address:%d/n",&g_global);
printf("s_val0 address:%d/n",&s_val0);
printf("str address:%d/n",str);
printf("str val address:%d/n",&str);
printf("val address:%d/n/n",&val);

printf("--------class memory----------/n");
printf("sizeof A:%d/n",sizeof(A));
printf("sizeof B:%d/n",sizeof(B));
printf("sizeof C:%d/n/n",sizeof(C));
}

输出结果为:



由该果可以看出:全局变量、静态变量(包括类静态成员)存储在全局存储区,字符串存储在全局字符区(区分全局存储区),局部变量存储在栈中。

类的静态成员不算在类的总存储区内,C从表A、B两个父类继承过来两个虚函数表。C的大小为A+B+C自己的存储区大小。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值