标准分配器是否需要分配连续内存?

blu*_*rni 6 c++ memory-management c++11

我无法在C++ 11标准中找到是否需要符合标准的分配器来返回指向连续内存块的指针.

std::vector(23.3.6.1/1)上的连续存储要求似乎意味着这样(否则似乎不可能std::vector与任意符合标准的分配器一起使用).但任何澄清都是最受欢迎的.

等效的问题是:可以我总是通过由返回的存储块移动allocate()通过指针算术(可能是通用的转换后pointer通过返回类型allocate()以++指针作为实例描述的纯纯粹的C 这里)?

MSa*_*ers 5

是的,它必须是连续的,因为指针算法allocator::pointer按预期工作.

如果你考虑一下,返回的内存很少是物理连续的.它看起来只是连续的,因为现代CPU具有虚拟内存,并X*在此虚拟内存中进行解释.

  • @BoBTFish:C++标准没有正式指定所有内容,但它遵循的事实是`allocator :: construct(pointer,val)`必须处理`allocator :: allocate`返回的指针.因为`allocate`可以为多个元素返回内存(非常有意),并且那些附加元素位于`指针+ 1,指针+ 2,`等等,以便在'T*指针'的情况下,并且因为没有语言这使`allocator <T> :: pointer!= T*`成为例外,它指出`pointer + N`必须始终指向第N + 1个元素.这是连续记忆的定义. (2认同)