二、C++内存管理以及和C的小细节

1.C++内存分区(大中小厂面试高频知识点)

学过数据结构以后的对于内存分区的概念就只有“内存四区”。

当然这里的“四区”不是“四驱兄弟”的四个轱辘......不过可以想象成操作系统的四个轮胎,内存就是轮胎里面的空气,有的轮胎是氧气、有的是氢气和二氧化碳、而有的是氮气。

    堆:动态申请的内存空间,就是由malloc分配的内存块,由程序员分配和释放,若程序员运行程序结束后,没有释放程序,该分区自动由操作系统回收。

    栈:由编译器自动分配释放,存放函数的参数值(形参),

    全局/静态变量存储区:顾名思义,这个区存放的是全局变量和静态变量,程序运行结束操作。

    代码区:这里存放函数体的二进制代码,操作系统拥有直接管理的权限。

以上四个是所谓的内存四区,还有一个比较重要的点也是重要的面试难点

    常量存储区:顾名再思义,存放的是常量,常量是什么?不可以修改的数据,常常就只有一个面孔,经常是一个人,常常不改变的东西。例如const修饰的变量被定义为一个常量,就是将之存储在常量存储区的。

所以,综上!!!当当当!!!铛铛铛!!!!

C++内存分区是其实是分为5个区哦!!!

当然百度百科里是给了4个区,如果回答出最后一种,我想也算是一个加分项,答不出来也没关系,当你打代码的时候,多多思考就好了,这个数据存在哪?怎么用?往哪用?有啥用?一系列的疑惑会让你更加明白数据存在内存的那一块了。

2.C语言和C++内存分配原则

同样我们采用分区的方式进行学习内存分配原则,

C++:

      栈区(stack):栈区的执行速度是最快的一个区,采用先进后出的原则。由编译器自动分配并释放,不需要程序员自己操作。

      堆区(heap)堆区一般由程序员自己分配或者释放,如果不释放的话,程序结束之后可能会有操作系统回收。但是这里的堆和数据结构中的堆并不是一回事。

      全局/静态存储区:内的变量在程序编译阶段已经分配好内存空间并初始化。这块内存在程序的整个运行期间都存在,操作系统

      代码区:二进制代码的地盘,操作系统的一本字典。会自己用自己释放等等操作。

      常量存储区(次内存区):主要存放程序中的字符串常量,程序结束时有操作系统释放。

C语言和C++在内存方面分配原则基本是一样的处理方法,主要从动态和静态去分析。

1.静态内存分配:编译时分配。包括:全局、静态全局/局部。

2.动态内存分配:运行时分配。包括:

栈(stack): 局部变量。

堆(heap): 在c语言中用到的变量被动态的分配在内存中。(当使用了malloc或calloc、realloc、free等内存分配函数时)

3.细节在哪里?

堆和栈的区别在哪里?

你可以想象一下,一堆苞谷和一栈苞谷的区别,从图形上想象一个有点类似于圆锥,一个是文具盒方方的。

好了,言归正传。

二者申请内存的方式不同:堆分配原则由程序员主动申请去买老哥的。栈是系统动态静态自动分配的。

二者在内存空间存在方式不同:堆是在内存中的空间(由低地址向高地址扩展)不断延续。栈是内存中一段连续的空间(由高地址向低地址延伸),最大容量由系统预定好的。

二者申请内存后系统响应方式不同:申请堆空间的时候,堆在内存中呈现出的方式类似于链表(用来记录空闲地址空间的链表),在链表上寻找第一个大于申请空间的节点分配给程序。将该节点从链表中删除,很多系统这块空间地址的首地址存放的是内存的大小,以便释放,将该快空间上的剩余空间再次链接到空闲的链表上。二栈申请空间的时候,系统自动分配栈空间,如果剩余的空间大于申请空间则成功,否则分配失败,栈会溢出。

二者申请效率不同:栈是自动分配,取决于系统处理的速度,申请效率肯定是比人快的,但是程序员是无法control的,而堆是程序员主动申请的空间,效率虽低,但空间使用起来便于操作,但缺点是容易产生碎片。

二者存放的内容不同:栈存放局部变量,函数的参数。堆中存放的内容是有程序员自己所控制的。

好啦,以上就是今天所学到的第二个C++大厂面试知识点,感兴趣的小伙伴欢迎评论区留言、点赞、转发。

从零开始学C++11新标准知识(内含大厂面试题100道)第二期相关推荐

  1. 从零开始学前端 - 1. HTML基础知识

    作者: 她不美却常驻我心 博客地址: https://blog.csdn.net/qq_39506551 微信公众号:老王的前端分享 每篇文章纯属个人经验观点,如有错误疏漏欢迎指正.转载请附带作者信息 ...

  2. C++11新标准 default 和 delete的使用

    写这个知识点的初衷也是在面试的时候被问到过的,由于对C++11新标准不是很了解,所以你懂得...,好了不多说了 首先我们要了解一下C++类中的四类特殊成员函数:分别是默认构造函数.析构函数.拷贝构造函 ...

  3. 【C++面试宝典】C++11新特性知识总结

    目录 C++11新特性 auto自动类型推导 decltype类型指示符 nullptr常量 lambda表达式(匿名函数) 智能指针 auto_ptr unique_ptr shared_ptr w ...

  4. 基于c++11新标准开发一个支持多线程高并发的网络库

    背景 新的c++11标准出后,c++语法得到了非常多的扩展,比起以往不论什么时候都要灵活和高效,提高了程序编码的效率,为软件开发者节省了不少的时间. 之前我也写过基于ACE的网络server框架,但A ...

  5. C++11新特性(原封不动转载待查)

    C++11标准发布已有一段时间了, 维基百科上有对C++11新标准的变化和C++11新特性介绍的文章. 我是一名C++程序员,非常想了解一下C++11. 英文版的维基百科看起来非常费劲,而中文版维基百 ...

  6. C++11新特性之新类型与初始化

    C++11新特性之新类型与初始化 snoone | 2016-06-23 11:57    浏览量(148)    评论(0)   推荐(0) 数据 这是C++11新特性介绍的第一部分,比较简单易懂, ...

  7. c++语言自定义操作符,C++11新特性之自定义字面量

    1.示例 C++11新标准中引入了用户自定义字面量,也叫自定义后缀操作符,即通过实现一个后缀操作符,将申明了该后缀标识的字面量转化为需要的类型.考察如下代码: long double operator ...

  8. 【C++11新特性】 nullptr关键字

    原创作品,转载请标明:http://blog.csdn.net/Xiejingfa/article/details/50478512 熟悉C++的童鞋都知道,为了避免"野指针"(即 ...

  9. C++11新特性:using和namespace的特殊用处

    using和namespace的特殊用处 零.前言 一.using 1.类型别名 2.别名模板 3.代码示例 二.namespace 1.命名空间 2.命名别名 3.使用示例 零.前言 C++11以后 ...

最新文章

  1. Android2.2 API 中文文档系列(3) —— AccessibilityService
  2. git 创建webpack项目_webpack项目的搭建及环境构建
  3. HbuliderX 历史版本下载
  4. linux 中文显示乱码解决办法
  5. 解决微信商户号无法开通企业付款到零钱
  6. 从URDF到KDL(C++Python)
  7. 智能优化算法:饥饿游戏搜索算法-附代码
  8. 2022RWCTF体验赛web的wp
  9. 聊天室页面问题和解决方案
  10. EndNote X9插入参考文献的格式
  11. Layui官网地址官网仓库
  12. 红绿灯单片机仿真;Keil和Proteus的联合使用仿真;包含免费资源
  13. Linux虚拟机无法联网问题解决
  14. Python 必须掌握的知识
  15. 基于NLP的软件分析和程序漏洞挖掘(二)
  16. 轮播与fragment联动
  17. Centos 6.5 x64 安装 虚拟专用网 服务器
  18. 疫情之下,金三银四的春季招聘还有吗?
  19. 苹果公布穿戴设备进行跌倒检测专利,Find My技术堪称王炸
  20. 象棋的ai的视线_隐藏在视线中的“未来”技术:人工智能

热门文章

  1. 强智教务管理系统爬虫难关1
  2. 酷比魔方iwork8刷机shell_酷比魔方iwork8旗舰版刷机教程及固件上线
  3. 淘气的小丁-使用jQuery实现漂浮气球的效果
  4. openwrt mesh网络设置
  5. 学习到第一个国庆的感想
  6. 系统初始化配置资源失败教程
  7. 如何使用语音验证码API
  8. 最新的计算机知识点总结,2017计算机一级基础知识点总结
  9. QlikView介绍
  10. 我喜欢的图片不是png格式怎么办,使用Windows电脑1分钟搞定格式转换