编程语言书籍解释了在堆栈上创建了值类型,并且在堆上创建了引用类型,而没有解释这两者是什么.我还没有看清楚这个问题.我理解堆栈是什么.但,
language-agnostic heap stack memory-management dynamic-memory-allocation
我已经编程了一段时间,但它主要是Java和C#.我实际上从来没有必须自己管理内存.我最近开始用C++编程,我有点困惑的是什么时候我应该把东西存放在堆栈上以及何时将它们存储在堆上.
我的理解是,非常频繁访问的变量应该存储在堆栈中,对象,很少使用的变量和大型数据结构都应该存储在堆上.这是正确的还是我错了?
可能重复:
何时最好使用堆栈而不是堆,反之亦然?
我已经阅读了关于堆与堆栈的其他一些问题,但它们似乎更关注堆/堆栈的作用而不是使用它们的原因.
在我看来,堆栈分配几乎总是首选,因为它更快(只需移动堆栈指针与在堆中查找可用空间),并且您在使用它时不必手动释放已分配的内存.我可以看到使用堆分配的唯一原因是,如果要在函数中创建对象,然后在函数作用域之外使用它,因为堆栈分配的内存在从函数返回后自动取消分配.
还有其他原因使用堆分配而不是我不知道的堆栈分配吗?
可能重复:
为什么你想要在堆而不是堆栈上分配内存?
Test2 *t2 = new Test2();
t2->test();
Test2 t3;
t3.test();
Run Code Online (Sandbox Code Playgroud)
为什么我要创建Test2类型的指针对象?为什么不做Test2的非指针版本?我为什么要做指针对象?
在这里找到答案:
我最近一直在使用ca,发现我真的不喜欢处理内存管理,或者至少我认为如果我指向一个指针我必须释放它,即使它是最琐碎的事情.这导致我尽可能多地在堆栈上分配并使用&获取其位置.甚至创建单独的int和inptr变量(我在宏中使用&运算符时出现了一些左值问题).
我找不到很多地方需要处理数据传输(上/下)的地方.与此同时,我需要相当数量的早期回报(而且我宁愿避免得到).一般的c意见是什么?在特定情况下我是否应该使用其中一个或另一个明显的迹象.
PS让我有点担心的一件事是,我最近因为使用了错误的sizeof for malloc而出现了内存损坏问题而且我没有立即注意到它,因为我的大部分代码路径直接在那之后没有使用堆.你认为这种腐败隐藏的问题有多大?
可能重复:
点(.)运算符和C++中的 - >有什么区别?
使用点符号和指针方式有什么区别?
使用或不使用指针实例化对象.
实例化w/oa指针=然后使用点表示法
实例化w/a指针=然后使用 - >
两者有什么不同?何时以及为什么要使用另一个?