【发布时间】:2011-09-21 20:23:06
【问题描述】:
我知道标准不会强制std::vector分配连续的内存块,但所有的实现都遵循这一点。
假设我希望创建一个多维静态数组的向量。为简单起见,考虑二维和长度为 N 的向量。也就是说,我希望创建一个包含 N 个元素的向量,例如 int[5]。
我可以确定所有 N*5 整数现在在内存中都是连续的吗?这样我原则上可以通过知道第一个元素的地址来访问所有整数?这个实现是否依赖?
作为参考,我目前在连续内存块中创建 2D 数组的方式是首先创建一个长度为 N 的 float* (动态)数组,将所有 N*5 个浮点数分配到一个数组中,然后复制每个数组的地址float* 的第一个数组中的第 5 个元素。
【问题讨论】:
-
我知道标准不强制
std::vector分配连续的内存块 — It does, starting from C++03. -
@KennyTM:不知道它不在 C++98 中。谢谢。我想这仍然是一个实际要求,以满足元素访问的规定操作复杂性要求,对吧?就像
std::string在实践中一直有连续的元素存储一样,尽管直到 C++0x 才明确规定它。
标签: c++ memory-management vector standards contiguous