栈内存那么快,为什么还要用堆存储?

问题描述 投票:0回答:2

我一直在想,如果栈可以很容易地使用并且比堆快得多,为什么我们要使用堆......

看这段代码:-

int *i = new int; *i = 7;
(堆)

{ int i = 7; }
(堆) 如果我能够使用 { } 括号将它们存储在函数中并且在此之后自动删除变量,那么为什么我们仍然使用堆? 如果我接受用户输入,我可以使用像
std::string
getline
这样的安全函数....这将防止缓冲区溢出并在{}括号中使用它们也将节省内存

没有与此问题相关的视频/博客...

c++ c memory-management stack heap
2个回答
0
投票

有几种情况你可能想要使用动态内存:

  1. 当你需要一个对象来生存栈帧之间
  2. 当您不希望成员变量影响您的类的足迹时。
  3. 当您的对象很大并且您出于任何原因无法负担扩展堆栈内存时。

0
投票

首先,堆栈内存中只能存储静态数据,这意味着您将无法在其中存储队列和向量。此外,与堆栈不同,堆可由多线程应用程序中的多个线程访问。当然,栈也很容易溢出,但是堆就没有这样的限制。例如,您将无法在函数内创建一个大数组,因为它会尝试写入堆栈内存。而在全局区域中,您可以

© www.soinside.com 2019 - 2024. All rights reserved.