gpt4 book ai didi

c++ - 堆栈溢出——静态内存与动态内存

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:54:37 25 4
gpt4 key购买 nike

如果你写int m[1000000];在C/C++的main函数中,会出现堆栈溢出的运行时错误。相反,如果你写 vector<int> m;然后在那里 push_back 1000000 个元素,它将运行良好。

我很好奇为什么会这样。它们都是本地内存,不是吗?提前致谢。

最佳答案

是的, vector 本身是一个自动(堆栈)对象。但是 vector 持有一个指向其内容的指针(一个内部动态数组),它将被分配到堆上(默认情况下)。为了简化一点,您可以将 vector 视为在内部执行 malloc/reallocnew[] 调用(实际上它使用了一个 allocator )。

编辑:正如我所指出的,自动变量分配在堆栈上,而 malloc 通常分配在堆上。每个的可用内存都是平台甚至特定于配置的,但可用堆栈内存通常有限。

关于c++ - 堆栈溢出——静态内存与动态内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3930013/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com