【发布时间】:2011-12-31 11:02:28
【问题描述】:
假设我有一个 std::vector 或 const std::strings。
std::vector<const std::string> strs;
现在这里的默认行为是实际的字符串容器可以分配在堆上的任何位置,这几乎可以在迭代包含的字符串时禁用任何数据预取。
strs.push_back("Foo"); // allocates char block on heap
strs.push_back("Boo"); // allocates char block on heap
但是,由于字符串是“const”,我希望 char 块被连续分配或彼此靠近(如果可能),以便在遍历字符串时获得最有效的缓存行为。
有没有办法实现这种行为?
【问题讨论】:
-
除了答案中显示的问题之外,您甚至不能拥有 const 对象的向量。存储类型的要求包括可复制(或可移动,取决于 C++ 版本)。 const 对象会失败。
-
@BoPersson:好点。我想由程序员来确保字符串没有被改变。
-
如果将向量本身设为 const,则无法更改其成员。但是,向量和字符串都不会真正意识到这一点。
标签: c++ string optimization memory-management