在Rust中,有很多不同的类型。我怎么知道堆栈和堆中是否有东西?
假设我嵌套的结构深达20个级别,并且每个级别都包含堆栈数据,但是在20个级别上有一个堆Box,这是否意味着整个树现在都在堆上?
如果结构的根在堆栈的Box内,那该怎么办?所有基于堆栈的数据现在都移到了堆栈上吗?
是否有工具可以观察此堆栈与堆逻辑?
在Rust中,有很多不同的类型。我怎么知道堆栈和堆中是否有东西?
如果没有人将其放在堆上,那么它就不在堆上。
假设我嵌套的结构深达20个级别,并且每个级别都包含堆栈数据,但是在20个级别上有一个堆Box,这是否意味着整个树现在都在堆上?
编号Box
是专门用于堆的指针。所以盒子里面的东西都在堆上。剩下的就放在您放置的位置(树本身可以放在一个盒子中,这时您将拥有一个指向另一个堆分配结构的堆分配结构)。
其他常见的堆指针是Rc
,Arc
,String
,或Vec
。当然,还有其他更复杂的结构可以在堆上完成工作,而不必真正成为指针,例如HashMap
,朋友。
如果结构的根在堆栈的Box内,那该怎么办?所有基于堆栈的数据现在都移到了堆栈上吗?
是。由于结构的其余部分在“根”的“内部”,因此将整个内容装箱。
是否有工具可以观察此堆栈与堆逻辑?
并不是的。有诸如跟踪分配器之类的工具,或某些分配器中的调试支持(例如,jemalloc中的堆分析),可以让您跟踪堆分配。但是所有这些都可以告诉您,已分配了一定数量的字节,而不是这些字节的确切字节数,并且您只能通过推断未发生堆分配来知道未发生堆分配。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句