C++ 带有地址提示的新运算符(在另一个对象附近创建对象)

C++ 带有地址提示的新运算符(在另一个对象附近创建对象),c++,visual-studio-2010,memory-management,new-operator,C++,Visual Studio 2010,Memory Management,New Operator,我希望创建许多相同类型的对象,并且希望它们在内存中相对靠近,以避免页面丢失 有没有办法告诉操作系统windows平台将内存分配到尽可能接近给定地址的位置?地址提示 MSDN中隐藏的某些函数 我知道有新的操作员安置,但我想知道是否还有其他的把戏。 是的,我知道如何使用新的位置创建自定义内存管理 伪代码(如果存在): Myclass *a = new Myclass(); Myclass *b = AloocateNear(a,sizeof(Myclass)); 答案是新的。如果您真的关心局部性

我希望创建许多相同类型的对象,并且希望它们在内存中相对靠近,以避免页面丢失

有没有办法告诉操作系统windows平台将内存分配到尽可能接近给定地址的位置?地址提示 MSDN中隐藏的某些函数

我知道有新的操作员安置,但我想知道是否还有其他的把戏。 是的,我知道如何使用新的位置创建自定义内存管理

伪代码(如果存在):

Myclass *a = new Myclass();

Myclass *b = AloocateNear(a,sizeof(Myclass));

答案是新的。如果您真的关心局部性,那么显然您必须将placement new与某种内存池一起使用。

使用std::vector。索引X和X+1处的项目保证彼此相邻


正如sheu在评论中指出的,这种解决方案很难破坏单个对象。

我只想使用placement new。是的,但我不想分配预定义的大小,然后处理释放和内存碎片。我知道,问题是,MSDN中是否隐藏了另一个函数,它可能执行以下操作that@YochaiTimmer例如我不这么认为。我认为,如果已经存在一个完全足够的read:placement解决语言本身问题的新方法,编译编写人员就不会实现这样的扩展。但话说回来,他们是微软,所以谁知道呢……如果只分配X倍的SizeOfCyclass并使用placement new在那里创建对象,效率会更高。虽然是的,但这是一个具有类似效果的好技巧。@YochaiTimmer:只需分配X倍sizeofMyclass并使用placement new创建对象,基本上就是std::vector。使用std::vector不是一个好技巧。毫无理由地重新发明它是一个骗局。为什么您认为您的方法更有效?不幸的是,在这种情况下,您不能使用std::vector销毁单个对象,而不销毁整个向量。@JoachimPileborg:这对我来说不是一个好的解决方案,因为它需要对池对象进行大量更改,而不是对容器进行大量更改。