IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 【C语言】——内存与指针问题 -> 正文阅读

[C++知识库]【C语言】——内存与指针问题

内存

内存分配的方式有几种?

  1. 静态存储区分配
  2. 栈上分配
  3. 堆上分配

栈与堆的概念及区别

概念:
堆栈:特殊的存储区,主要功能是暂时存放数据和地址。
区别:

  1. 申请方式。栈的空间由操作系统自动分配/释放。堆的空间由程序员手动去分配/释放。
  2. 申请大小的限制。栈一般是一块连续的存储区域,内存大小为2M。堆是不连续的内存区域,其大小受限于计算机系统有效的虚拟内存。
  3. 申请效率。栈由系统自动分配,速度很快。堆是由new分配的内存,一般速度比较慢,不过用起来方便。

栈在C语言中有什么作用?

  1. 用来存储临时变量,临时变量包括:函数参数和函数内部定义的临时变量。
  2. 栈是多线程编程的基石。

C语言中函数参数压栈的顺序是怎样的?

从右往左。主要是为了支持可变长参数形式。

什么是内存泄漏?

申请了一块内存空间,使用完毕后没有释放掉。

如何判断内存泄露?

  1. 良好的编码习惯,尽量在涉及内存的程序段,检测出内存泄露。
  2. 将分配的指针以链表的形式自行管理,使用完毕后从链表删除。
  3. Boost 中的smart pointer。
  4. 一些常见的插件工具:Leaky,ccmalloc,Dmalloc。

new/delete与malloc/free的区别是什么?

  1. new/delete是C++中的操作符,malloc/free是标准库函数。
    
  2. malloc/free不能自动的调用构造函数和构析函数,而new/delete可以。
    
  3. new返回的是指定类型的指针,可自动计算所申请内存的大小,而malloc需要我们自己计算申请内存的大小,并在返回时,强行转换为实际类型的指针。
    

指针

数组指针和指针数组的区别?

*数组指针就是指向数组的指针,它实际上是一个指针。如:int (p)[8]。
*指针数组就是数组中的元素是指针,它实际是一个数组。如:int p[8]。

函数指针和指针函数的区别?

1.函数指针:
在程序中定义了一个函数,那么在编译时系统会自动为这个函数分配一段存储空间,这段存储空间的首地址称为这个函数的地址。函数名表示这个地址。在地址中,我们可以定义一个指针变量来存放,这个指针变量就叫做函数指针变量,简称函数指针。

一般形式:类型名 (*指针名)(指针参数列表)
int *p(int int ) :一个指向函数的指针变量p

2.指针函数:
是一个函数,其返回值是一个地址值。函数返回值必须用同类型的指针变量来接受,指针函数一定有“函数返回值”,在主调函数中,函数返回值必须赋给同类型的指针变量。

一般形式:类型名 *函数名(函数参数列表)
int *p(int ,int) p是一个函数,前面有int,也就是说p是一个返回值为整形指针的函数。

数组名和指针的区别与联系

  1. 数据保存方面。指针保存的是地址。数组保存的是数据。
  2. 数据访问方面。指针对数据是间接访问,需要用到解引用符号(*数组名)
    数组对数据是直接访问,可通过下标访问或数组名+元素偏移量的方式。
  3. 使用环境。指针多用于动态数据结构和动态内存开辟。
    数组用于存储固定类型个数且类型统一的数据结构和隐式分配。

指针常量,常量指针,指向常量的常量指针有什么区别?

1.指针常量
int * const p p是一个常量类型的指针,不能修改这个指针的指向,但这个指针所指向的地址上存储的值可以修改。
2.常量指针
int const *p 定义一个指针指向一个常量,不能通过指针来修改这个指针指向的值。
3.指向常量的常量指针
const int *const p 既不能修改指针的值,也不能修改指针指向的值。

野指针是什么?

  1. 指向不可用内存的指针,当指针被创建时,指针不可能自动指向NULL。
  2. 当指针被free/delete释放掉时,没有把指针置为NULL。
  3. 指针操作超越了变量的作用范围。

如何避免野指针

  1. 对指针进行初始化。
  2. 指针用完后释放内存,将指针赋NULL。

大小端问题

大端:高位字节排放在内存的低地址端,低字节位排放在内存的高地址端。
小端:低位字节排放在内存的低地址端,高字节位排放在内存的高地址端。
简单来说:大端——高尾端,小端——低尾端

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-07-30 12:34:13  更:2021-07-30 12:35:42 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/3 10:04:36-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码