繁体   English   中英

Pimpl 习语内存使用

[英]Pimpl Idiom Memory Usage

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

...原因是为了减少编译时间。

你的意思是说我猜的重新编译时间,正如在实践是否真的使用了 pImpl idiom? (“重新编译时间确实减少了,因为只需要重建源文件,而不是头文件,以及包含它的每个文件”)。

pimpl 不需要动态分配内存吗?

不是真的,它需要指针,但可以将指针设置为指向任何东西,无论是否是静态的。 不使用动态内存分配的情况下阅读Pimpl idiom 中的更多内容。

如果它被大量使用,你最终会使用更多的内存。

嗯,开销是由于指针(4 或 8 字节)。 在任何情况下,数据都必须存储在某处,无论这个“某处”是否是静态的,内存几乎都是一样的。

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

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


PS:正如 juanchopanza 所说, 内存碎片(“当你的大部分内存分配在大量不连续的块或块中时 - 总内存中有很大一部分未分配,但在大多数典型情况下无法使用”)应该是也考虑到

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM