-
内存分配方式
c++内存中分为5个区,分别是堆、栈、自由存储区、全局\静态存储区以及常量存储区
堆: 操作系统维护的一块特殊内存,用于程序的内存动态分配。C语言使用malloc从堆上分配内存,free释放已分配内存。
栈:执行函数时,函数的局部变量的存储单元是在栈空间创建,函数执行结束这些从存储单元会被自动释放。栈内存分配运算内置于处理器指令集上,效率很高,但内存容量有限。
自由存储区:自由存储区是c++基于new操作符的一个抽象概念,凡是通过new操作符申请的内存都叫自由存储区。一般情况下,编译器在底层通过malloc/free实现new/delete操作,此时可以说自由存储区位于堆空间。
全局\静态存储区:这块内存在程序编译阶段就已经分配好,程序运行期间一直存在。
常量存储区:用于存放const常量的特殊存储区。 -
全局变量、static变量初始化时间
全局变量与静态变量是存放在静态\全局存储区的,根据c++标准,在main函数执行之前,编译器已经为其分配好了内存。
全局变量、文件域的静态变量和类的静态成员变量在main执行之前的静态初始化过程中分配内存并初始化;
但是这个说法还是不够精确,到底是编译时期还是运行时呢?
答案是两者都有
从语言层次来讲,初始化分为两个阶段(c++ 11)
静态初始化:
使用常量对变量进行初始化,主要包括zero-initialization 和 const initializatio
c++内存分配以及变量初始化
最新推荐文章于 2023-08-29 16:45:00 发布
本文介绍了C++内存的五个区域:堆、栈、自由存储区、全局/静态存储区和常量存储区。堆由malloc/free管理,栈在函数调用时分配和释放。自由存储区通过new/delete操作,全局/静态存储区在编译时分配,常量存储区用于存放const常量。变量初始化分为静态初始化和动态初始化,全局变量、静态变量在main执行前静态初始化,而静态局部变量在C++中则在首次执行相关代码时初始化。
摘要由CSDN通过智能技术生成