C++

占用内存

一个C/C++编译的程序占用内存分为以下五个部分:

  1. 栈区(stack):由编译器自动分配与释放,存放为运行时函数分配的局部变量、函数参数、返回数据、返回地址等。其操作类似于数据结构中的栈。

  2. 堆区(heap):一般由程序员自动分配,如果程序员没有释放,程序结束时可能有OS回收。其分配类似于链表。

  3. 全局区(静态区static):存放全局变量、静态数据、常量。程序结束后由系统释放。全局区分为已初始化全局区(data)和未初始化全局区(bss)。

  4. 常量区(文字常量区):存放常量字符串,程序结束后由系统释放。

  5. 代码区:存放函数体(类成员函数和全局区)的二进制代码。

三种内存分配方式

  1. 从静态存储区分配:内存在程序编译的时候已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。

  2. 在栈上创建:在执行函数时,函数内局部变量的存储单元可以在栈上创建,函数执行结束时,这些内存单元会自动被释放。 栈内存分配运算内置于处理器的指令集,效率高,但是分配的内存容量有限。

  3. 从堆上分配:亦称为动态内存分配。 程序在运行的时候使用malloc或者new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存。 动态内存的生命周期有程序员决定,使用非常灵活,但

    如果在堆上分配了空间,既有责任回收它,否则运行的程序会出现内存泄漏,频繁的分配和释放不同大小的堆空间将会产生内存碎片。

参考博客

  1. https://blog.csdn.net/cherrydreamsover/article/details/81627855

  2. https://www.zhihu.com/question/320804493

  3. https://www.pianshen.com/article/97451267985/

  4. https://blog.csdn.net/qingkongyeyue/article/details/53895553?locationNum=10&fps=1

原文地址:https://www.cnblogs.com/OFSHK/p/13811558.html