首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >销毁呼叫安置新

销毁呼叫安置新
EN

Stack Overflow用户
提问于 2018-03-14 07:13:49
回答 1查看 68关注 0票数 2

我有个基本问题。

通常,使用placement,我们可以在预先分配的内存上构造对象。

举个例子: My_CLass大小为20字节,希望为5个对象创建一个池。因此,分配了5*20 => 100个字节,池的起始地址为0x1234。

现在,使用placement,我已经在内存池中放置了3个对象。

我的问题是,

  1. 有了这个起始地址0x1234,是否仍然可以在池中找到有效对象的数量?
  2. 如果我销毁第二个对象,系统如何知道在第二个位置创建下一个对象等等?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-14 07:32:56

在本讨论中,“池”一词被用来表示某种预先分配的内存,这些内存应该包含一组特定类型的对象(可以是一个类,也可以是不同的类,相关的或不相关的)。

  1. 也许吧。这完全取决于池本身是如何设计和实现的。
  2. 假设一个支持这类操作的正确和工作的实现,池将跟踪空闲空间的位置、大小等等。 通常的工作方式是在池的元数据中存储一个指针(换句话说,关于池本身的数据,它知道池的大小,分配了多少元素等等),它是池中自由元素链接列表的头。这只是一个解决方案,但这是一个相当普遍的解决方案。

请注意,这种情况与堆中的常规new分配完全没有区别,但如果您有一个特定的池,它能够跟踪池中的元素数,而普通堆不允许直接这样做(您可能会发现总共有多少分配,但这将是任何东西,从文件缓冲区分配和动态字符串到X类型的对象,Y类型-堆本身不跟踪特定分配的目的,这是“其他人的问题”)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49271667

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档