c++内存分配以及变量初始化

本文介绍了C++内存的五个区域:堆、栈、自由存储区、全局/静态存储区和常量存储区。堆由malloc/free管理,栈在函数调用时分配和释放。自由存储区通过new/delete操作,全局/静态存储区在编译时分配,常量存储区用于存放const常量。变量初始化分为静态初始化和动态初始化,全局变量、静态变量在main执行前静态初始化,而静态局部变量在C++中则在首次执行相关代码时初始化。
摘要由CSDN通过智能技术生成
  1. 内存分配方式
    c++内存中分为5个区,分别是堆、栈、自由存储区、全局\静态存储区以及常量存储区
    堆: 操作系统维护的一块特殊内存,用于程序的内存动态分配。C语言使用malloc从堆上分配内存,free释放已分配内存。
    栈:执行函数时,函数的局部变量的存储单元是在栈空间创建,函数执行结束这些从存储单元会被自动释放。栈内存分配运算内置于处理器指令集上,效率很高,但内存容量有限。
    自由存储区:自由存储区是c++基于new操作符的一个抽象概念,凡是通过new操作符申请的内存都叫自由存储区。一般情况下,编译器在底层通过malloc/free实现new/delete操作,此时可以说自由存储区位于堆空间。
    全局\静态存储区:这块内存在程序编译阶段就已经分配好,程序运行期间一直存在。
    常量存储区:用于存放const常量的特殊存储区。

  2. 全局变量、static变量初始化时间
    全局变量与静态变量是存放在静态\全局存储区的,根据c++标准,在main函数执行之前,编译器已经为其分配好了内存。
    全局变量、文件域的静态变量和类的静态成员变量在main执行之前的静态初始化过程中分配内存并初始化;
    但是这个说法还是不够精确,到底是编译时期还是运行时呢?
    答案是两者都有
    从语言层次来讲,初始化分为两个阶段(c++ 11)
    静态初始化:
    使用常量对变量进行初始化,主要包括zero-initialization 和 const initializatio

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值