c++内存管理

一、内存基本概念
1.c++内存布局
在这里插入图片描述
如果的c++程序内存分布中, code segment放可执行程序的机器码
data segment存放已初始化的全局和静态变量,常量数据(如字符串常量)
bss(block started by symbol),存放未初始化的全局和静态变量(默认设为0)
heap 堆, 程序动态分配的内存在此区域
stack 栈, 由编译器自动管理分配,程序中的局部变量、函数返回值、返回变量等存在此区域

系统载入可执行程序段,将BSS段的数据载入数据段,将内存初始化为0,再调用程序入口(main函数)

(1)函数栈
可执行文件包括 BSS dataSegment codesegment
可执行文件载入内存后,系统会保留一些空间,即为堆区和栈区
堆区用于动态分配内存,栈区主要是函数和局部变量等
调用函数时,一块连续内存(堆栈帧)会压入栈
函数返回时,堆栈帧弹出
堆栈帧包含如下数据:

  • 函数返回地址
  • 局部变量/CPU寄存器数据备份
    在这里插入图片描述
    2.内存对齐
    基础类型,如float double int char等, 他们大小和内存占用一致
    对于结构体而言,进行了内存对齐,所以sizeof 可能大于结构体内所有成员总和
    (1)为什么进行内存对齐
    内存对齐使得数据读取更高效,处理器只能从地址为k的倍数的内存处开始读取数据,
    某些平台不内存对齐会崩溃
    (2)内存对齐的规则
    有效对齐值为结构体中的最宽成员和编译器/用户指定的对齐值中 较小的那个
    每个成员要进行对齐, 并且整个结构体也需要对齐
    成员对齐需要是成员有效对齐值的整数倍
    (成员对齐是有效对齐值和自身大小中的最小值)
    在这里插入图片描述
    3.继承类布局
    (1)一个类继承自另一个类,它自身的数据位于父类之后
    (2)含虚函数的类
    如果当前类包含虚函数,则会在类的最前端占用4个字节,用于存储虚表指针,它指向一个虚函数表
    虚函数表中包含当前类的所有虚函数

4.字节序
小端:低位有效字节存储于较低的内存位置
大端:高位有效字节存储于较低的内存位置

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值