栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

二、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++大厂面试知识点,感兴趣的小伙伴欢迎评论区留言、点赞、转发。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/960046.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号