c++内存模型

对象模型

对象的内容

虚函数 非虚函数 非静态成员变量 静态成员变量

对象的大小受以下三个因素影响

  1. 非静态成员变量
  2. 虚函数
  3. 对齐

注意:
1.C++规定空类对象大小至少为1字节,只是为了区分实例化对象。例如创建了多个空类的对象,可以通过对象的内存地址区分。
2.静态成员变量位于.bss或.data段,函数位于.txt段
在这里插入图片描述
内存布局

虚函数指针在前,非静态成员变量在后

1.数据:

非静态成员的声明顺序和内存分配顺序一致,不同访问控制级别分配顺序未规定

由于有填充,所以要注意声明顺序
在这里插入图片描述

2.对象
单继承:
基类在前,派生在后
在这里插入图片描述

对齐保证派生类赋值给基类的完整性
多继承:
在这里插入图片描述

总体原则:基在前,派生在后

##############################################################
c++primer内容
##############################################################

函数重载

特征标-函数参数

函数模板

template<class Any>;
void Swap(Any &a,Any &b);
模板的重载
void Swap(Any[],Any[],int n);
显示具体化
template<> void Swap<int>(int &,int &);

头文件管理

如果没有被定义过才查看 idndef 和endif之间的内容

#ifndef COORDIN_H_
...
#endif

存储持续性

  1. 自动

程序执行时被创建,执行完时被释放

堆栈实现

没有使用说明符时与auto等效
image.png

寄存器实现
register int y;  //寄存器没有地址 &y not allowed
  1. 静态

  • 函数定义外的变量和static定义的变量,在程序整个运行过程都存在。(使用固定内存块)

  • 默认初始化为0,只能使用常量表达式来初始化;

  • 与自动变量同名时将被覆盖,使用extern重新声明可使用以前的外部变量
    使用同名外部变量

  • ::放在变量前表示使用全局版本
    ::表示作用域解析操作符

外部链接性

代码块外部声明;

  • 在其他文件使用时要加上extern
内部链接性

代码块外部声明且加staic关键字

  • 声明与其他文件同名外部变量时会冲突,使用static可隐藏其他文件的变量
无链接性

代码块内部声明且加static关键字
静态变量链接性
使用const与static效果类似

  1. 动态

new操作符分配的内存,一直存在,直到delete将其释放或程序结束。
布局new:

#include<new>

p1 = new (buffer1) chaff;  // place structure in buffer1

p2 = new (buffer2) int[20];  //place int array in buffer2

布局new分配的内存不能用delete来释放

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

疏狂似风~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值