gpt4 book ai didi

c++ - 将大 vector 存储在堆栈中是个坏主意吗?

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

我一直在研究一堆图像处理程序.. 没什么特别的,主要是快速而肮脏的实验。图像数据存储在堆栈上声明的 vector 中(当我不需要传递数据时,我尽量避免使用指针)。我注意到尽管进行了无数次调试和单步执行,但我的某些函数的行为一直很奇怪。有时调试器会给我一个错误,它无法评估某个变量等等。事情通常是没有意义的,过去的经验告诉我,当这种情况发生时,这意味着发生了某种溢出或内存损坏。第一个想到的是,这可能是因为我将大量图像数据存储到 vector 中。

但是,我的印象是 vector 将它们的实际数据存储在堆中,因此我认为在堆栈中放置一些这样的大 vector 不会有什么坏处。我这样想错了吗?我应该分配我的 vector 并将它们存储在堆中而不是堆栈中吗?

谢谢,

最佳答案

[...]vectors store their actual data in the heap

vector与所有其他容器一样,使用分配器对象进行内存管理。通常,如果您没有指定任何内容作为模板的第二个参数,则默认分配器 -- std::allocator来自 <memory> - 用来。保留内存是分配器的责任。从免费商店或堆栈上都可以免费这样做。

大多数实现通常使用 pimpl 习惯用法并将指针存储在 vector 中指向自由存储上实际内存的对象。

I've noticed that some of my functions have been behaving very strangely despite countless amounts of debugging and stepping

您可能需要检查您是否正在使用 vector正确。查看有关每个成员函数获得的保证、包含的类型必须满足哪些条件以及迭代器何时失效的标准。这应该是一个好的开始。

关于c++ - 将大 vector 存储在堆栈中是个坏主意吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10924307/

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