当前位置:   article > 正文

C++面试题总结,一篇就够了_c++面试题及基本知识点

c++面试题及基本知识点

C++面试题汇总


C++知识点总结快速跳转

1. C基础

1.1 内存模型

1.1.0 内存四区

意义在于:赋予其不同的生命周期,给编程带来更大的灵活性

  • 运行前
    • 代码区:存放函数体的二进制代码,由操作系统管理
      • 共享的
      • 只读的:防止程序意外修改其指令
    • 全局区:存放全局变量和静态变量以及常量,结束后由系统释放
      • 全局区还包括常量区(字符串常量,const修饰的全局常量)
  • 运行后
    • 栈区:由编译器自动分配和释放,存放函数体的参数值、局部变量
      • 不能返回局部变量的地址,当离开作用域后,开辟在栈区的局部变量会被编译器自动回收
    • 堆区:由程序员分配和释放,若不释放,程序结束后由操作系统释放
      • 分全局堆和局部堆
      • 全局堆就是所有没有分配的空间,局部堆就是用户分配的空间
      • 堆在操作系统对进程 初始化的时候分配,运行过程中也可以向系统要额外的堆

1.1.1 简述C、C++程序编译的内存分配情况

  • 从静态存储区域分配
    内存在程序 编译 时 就已 经 分配 好,这块内 存在 程序 的整 个运行 期间 都存在 。速 度快、不容易出错 , 因 为 有系 统 会善 后。例 如全 局变 量, sta tic 变量, 常量 字符 串等。
  • 在栈上分配
    在执行函数时, 函数内局部变量的存储单元都在栈上创建,函数执行结束时这些存储单元自动被释放。 栈内存分配运算内置于处理器的指令集中, 效率很高, 但是 分配的内存容量有限 。大小为2M。
  • 从堆上分配
    即动态内存分配。程序在运行的时候用 malloc 或 new 申请任意大小的内存,程序员自己负责在何时用 free 或delete 释放内存。动态内存的生存期由程序员决定,使用非常灵活。如果在堆上分配了空间,就有责任回收它,否则运行的程序会出现内存泄漏 ,另外频繁地分配和释放不同大小的堆空间将会产生堆内碎块 。

一个C、C++ 程序****编译时内存分为5大存储区:堆区、栈区、全局区、文字常量区、程序代码区

1.1.2 分配函数与释放函数

  • C:malloc、calloc、realloc / free
  • C++:new / delete
1.1.2.1 malloc / free

大多数实现所分配的存储空间比所要求的要稍大一些,额外的空间用来记录管理信息——分配块的长度,指向下一个分配块的指针等等

  • malloc函数向内存申请一块连续可用的空间
  • 开辟成功则返回一个指向该空间的void* 型指针,所以需要对其进行强制类型转换,转换成我们想要的类型
  • 开辟失败则返回 NULL,所以一定要对malloc的返回值进行检查
  • free 用来释放动态开辟的内存,而不是释放指针
int* ptr = NULL;
ptr = (int*
  • 1
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/672482
推荐阅读
相关标签
  

闽ICP备14008679号