gpt4 book ai didi

c++ - Pimpl 成语内存使用

转载 作者:太空狗 更新时间:2023-10-29 21:34:59 25 4
gpt4 key购买 nike

在我的新工作场所,代码大量使用 Pimpl 惯用语,原因是为了减少编译时间。但是我有一个基本的查询——pimpl 不需要动态分配内存吗?因此,实际上我们在堆中分配了比需要更多的内存。如果它被大量使用,你最终会使用更多的内存。那么使用它是个好主意吗?

最佳答案

...the reason is to reduce the compile time.

你的意思是说我猜的重新编译时间,正如Is the pImpl idiom really used in practice?中所建议的那样(“重新编译时间真的减少了,因为只需要重新构建源文件,而不是头文件和包含它的每个文件”)。

Doesn't pimpl require dynamic allocation of memory?

不是真的,它需要指针,但指针可以设置为指向任何东西,无论它是否是静态的。在 Pimpl idiom without using dynamic memory allocation 中阅读更多内容.

And if it is used a lot, you end up using more memory.

好吧,开销是由于指针(4 或 8 个字节)造成的。无论如何,数据都必须存储在某处,无论这个“某处”是否是静态的,内存都差不多。

我说的差不多了,因为如果内存是动态分配的,系统必须做一些内务处理,这会产生开销。

但是,由于您使用了 Pimpl Idiom,因此内存不足的可能性极小。如果你这样做,那么问题就在别处,如果没有那个成语,你也会失去内存。


PS:正如 juanchopanza 所说,Memory Fragmentation (“当你的大部分内存分配在大量不连续的 block 或 block 中时 - 总内存中有很大一部分未分配,但对于大多数典型场景不可用”)也应该考虑在内

关于c++ - Pimpl 成语内存使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44483643/

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