美文网首页
C++ 堆与栈、空指针的释放等

C++ 堆与栈、空指针的释放等

作者: 全方位小白 | 来源:发表于2020-07-13 23:42 被阅读0次

"不在任何东西面前失去自我,哪怕是教条,哪怕是别人的目光,哪怕是爱情。" ——《成为简·奥斯汀》

今天在公司听了一堂C++课程,收获颇丰。学到新东西的快乐真的可以盖过其他所有。
本来今天可以写一篇长长的日更,但是由于回家后大部分的时间花在了用PS做组内的一幅图,导致没有足够的时间在12点到来之前写很多。

只能写一点比较明确、印象也比较深刻的内容了。

1. 堆与栈

老师今天提到 STL 容器中,不同的容器运行时数据存储的位置是不一样的。诸如array等是运行在栈中的,而vector、string是运行在堆中的。因此,初始化array时如果指定很大的size是有可能导致栈溢出的,而vector、string则不会。
这里就引出了一个概念,当我们在谈论程序运行时的堆和栈时是在谈论什么?
详细内容在一篇知乎回答中写的很详细了,我只摘取其中基础的部分:

堆,英文是 heap,在内存管理的语境下,指的是动态分配内存的区域。这个堆跟数据结构里的堆不是一回事。这里的内存,被分配之后需要手工释放,否则,就会造成内存泄漏。
栈,英文是 stack,在内存管理的语境下,指的是函数调用过程中产生的本地变量和调用数据的区域。这个栈和数据结构里的栈高度相似,都满足“后进先出”(last-in-first-out 或 LIFO)。

另外摘取另一位博主的总结

1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式类似于链表。

2. 空指针的释放

今天老师特别强调了新开辟内存及其释放的问题。
谈到释放时提到,C++标准中规定了,释放空指针是不会进行任何操作的,因此是没有安全问题的。而这一点甚至有专家都犯过错误。

学习使我快乐,日更亦然;

over~

相关文章

  • C++ 堆与栈、空指针的释放等

    "不在任何东西面前失去自我,哪怕是教条,哪怕是别人的目光,哪怕是爱情。" ——《成为简·奥斯汀》 今天在公司...

  • C++笔记

    c++名词解惑# 一。堆和栈的区别:++++++栈: FILO os自动分配释放,函数参数,局部变量等。 一级缓存...

  • [C++之旅] 16 对象指针/对象成员指针/this指针

    [C++之旅] 16 对象指针/对象成员指针/this指针 一、对象指针 对象指针指向堆中地址 对象指针指向栈中地...

  • C++11(1)-智能指针

    C++裸指针的内存问题有:1、空悬指针/野指针2、重复释放3、内存泄漏4、不配对的申请与释放 使用智能指针可以有效...

  • 内存管理

    一,堆和栈 二,空指针、野指针和僵尸对象、内存泄露 三,assign,weak,strong,copy 详解 四,...

  • 堆 栈的区别

    堆heap 程序员手动分配与释放, 如果没释放程序退出时OS负责释放。 栈Stack 系统自动分配与释放。 堆h...

  • C++相关知识

    new、delete是C++内建的操作符,无法重新定制 指针删除和堆空间的释放。删除一个指针p(delete p)...

  • java内存区域

    先验知识 java堆、栈栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方。与C++不同,J...

  • Java数据类型和存储的关系及String类型存储详述

    一.Java存储数据的地方:栈(stack)与堆(heap): 与C++不同,Java自动管理栈和堆,程序员不能直...

  • java堆、栈、堆栈的区别

    1.栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方。与C++不同,Java自动管理栈和堆...

网友评论

      本文标题:C++ 堆与栈、空指针的释放等

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