在新的

时间:2018-03-14 07:13:49

标签: c++ new-operator placement

我有一个基本问题。

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

比如说:My_CLass大小是20字节,想要为5个对象创建一个池。所以5 * 20 =>已分配100个字节,池的起始地址为0x1234

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

我的问题是,

  1. 有起始地址0x1234,无论如何都找到了 池中有效对象的数量?

  2. 如果我摧毁第二个     对象,系统如何知道第二个要创建的下一个对象     位置等等?

1 个答案:

答案 0 :(得分:0)

对于这个讨论,单词" pool"用于表示某种预先分配的内存应该包含某种特定类型的对象(可以是一个类,或者是不同类,相关或不相关)

  1. 也许。这一切都取决于池本身的设计和实现方式。

  2. 该池假定一个支持此类操作的正确且有效的实现,将跟踪可用空间的位置,大小等等。

    这通常的工作方式是存在池中元数据的指针(换句话说,有关池本身的数据,知道池的大小,分配了多少元素)等等),它是池中自由元素链表的头部。这只是一个解决方案,但它是一个相当普遍的解决方案。

  3. 请注意,这种情况与从堆中分配的常规new完全没有区别,除非您有一个特定的池能够跟踪池中的元素数量,这是正常的堆赢了不允许你直接做(你可以找到总共有多少分配,但这可以是从文件缓冲区分配和动态字符串到类型X的对象,类型Y - 堆它本身并不跟踪特定分配的目的是什么,即“其他人的问题"”。