如果对象位于最高地址,该怎么办?

时间:2016-05-06 15:29:54

标签: c++ memory stl iterator containers

如果static_cast< std::uintptr_t >(&obj) == std::numeric_limits< std::uintptr_t >::max() - sizeof(obj) + 1怎么办?比如说,obj是连续STL容器(或本机数组)中的最后一个元素,STL算法如何处理它,它使用迭代器的范围?我确定以这种方式设计的连续容器的迭代器(甚至调试版本),它们使用过去元素的地址(不可解除引用但有效)。

我知道,操作系统的常见设计是尽可能在最高地址分配堆栈,对于统一内存系统,放置第一个函数的返回地址(至少为main)。但是有些系统可以在任何地址上分配堆栈(对于每个进程,我想要)。

1 个答案:

答案 0 :(得分:2)

这是不可能的,因为必须至少有一个地址可用于过去的迭代器。

所以实现必须以某种方式解决这个问题,比如不在内存顶部分配对象(但可能是代码),或为另外一个地址留出空间。