美文网首页
C/C++ 堆 栈 静态 常量 代码 区 static关键字

C/C++ 堆 栈 静态 常量 代码 区 static关键字

作者: hey白启明 | 来源:发表于2019-03-06 22:58 被阅读0次

C++五种内存分区

  • 堆:使用new函数分配的内存块,使用应用程序控制,而不是编译器。每一个new对应一个delete。如果程序未回收变量,将会有操作系统自动回收。
  • 栈(堆栈):使用编译器分配,并且自动清除。例如局部变量、函数参数。
  • 自由储存区:使用malloc分配内存,使用free释放内存。和堆相似。
  • 静态(全局):存放全局变量和静态变量
  • 常量:存放常量

堆 栈区别

  • 举例int* p=new int[5];指针p保存在栈区,数组由new函数申请,而保存在堆区,指针p指向这一段内存。
  • 管理方式不同,栈由编译器自动管理,堆由程序中newdelete函数管理,容易内存泄漏。
  • 空间大小不同,堆所占内存较大
  • 产生碎片,栈的数据结构紧密,一般不会产生碎片,堆会产生碎片。
  • 空间大小:堆的内存较大。
  • 生长方向不同:对于堆来讲,生长方向是向上的,也就是向着内存地址增加的方向。对于栈来讲,它的生长方向是向下的,是向着内存地址减小的方向增长。
  • 分配效率:栈是机器系统提供的数据结构,计算机会在底层对栈提供支持:分配专门的寄存器存放栈的地址,压栈出栈都有专门的指令执行,这就决定了栈的 效率比较高。堆则是C/C++函数库提供的,它的机制是很复杂的,例如为了分配一块内存,库函数会按照一定的算法(具体的算法可以参考数据结构/操作系 统)在堆内存中搜索可用的足够大小的空间,如果没有足够大小的空间(可能是由于内存碎片太多),就有可能调用系统功能去增加程序数据段的内存空间,这样就 有机会分到足够大小的内存,然后进行返回。显然,堆的效率比栈要低得多。

static关键字控制变量储存方式

  • static关键字意义,使类中的一个变量为所有的类服务,而不是某一个对象。不破坏类的封装性,并且隐藏在类内部。
  • 优势:节省内存,同类共享。
  • 类的静态成员函数是属于整个类而非类的对象,所以它没有this指针,这就导致了它仅能访问类的静态数据和静态成员函数。
  • 不能将静态成员函数定义为虚函数。
  • 初始化只执行一次。

参考资料

相关文章

  • C++学习笔记目录

    C++初步 C++数据长度 C/C++ 堆 栈 静态 常量 代码 区 static关键字 C++类和对象 C++引...

  • 堆和栈的区别

    C++中,内存分为5个区:堆、栈、全局/静态存储区、常量存储区和程序代码区。 1、栈区(stack)—— 由编译...

  • 堆和栈 全局静态区等

    内存区域划分 栈区(stack) 堆区(heap) 静态存储区(static) 常量区 代码区 globalblo...

  • 内存管理

    首先,内存分为:栈区、堆区、全局区/静态区(存放全局变量和static静态变量)、常量区(存放字符串常量)、代码区...

  • C/C++ 堆 栈 静态 常量 代码 区 static关键字

    C++五种内存分区 堆:使用new函数分配的内存块,使用应用程序控制,而不是编译器。每一个new对应一个delet...

  • C++ 内存五大分区

    C/C++中内存分5大区:栈,堆,全局/静态存储区,常量存储区,代码区(也称自由存储区)。 代码区:毫无疑问是用来...

  • iOS -内存分配(非原创)

    内存分为:栈区,堆区,静态区(全局区),常量区,代码区 一、预备知识—程序的内存分配一个由C/C++编译的程序占用...

  • 内存分区

    C++的内存划分为栈区、堆区、全局区/静态区、字符串常量和代码区。 1. 栈区: 由系统进行内存的管理。说明:主要...

  • 动态内存分配_C语言

    逻辑上的分区 栈区 堆区 静态区 常量区 代码区 代码区,常量区,静态区,堆区,栈区这个排列顺序按照地址由小到大排...

  • C++第五弹---堆与拷贝构造函数

    动态内存分配 关于堆C++程序的内存格局通常分为四个区:全局数据区、代码区、栈区、堆区 全局变量、静态数据、常量存...

网友评论

      本文标题:C/C++ 堆 栈 静态 常量 代码 区 static关键字

      本文链接:https://www.haomeiwen.com/subject/zzlwuqtx.html