【问题标题】:How to use SGI Ropes with Windows Visual Studio 8.0?如何在 Windows Visual Studio 8.0 中使用 SGI 绳索?
【发布时间】:2011-05-20 18:35:03
【问题描述】:

下午好,我们正在使用 C++ 在 Windows 和 Linux 上构建重复数据删除程序的原型。昨天,我们在 Stack Overflow 上发布了一个关于如何避免 STL string 深拷贝的问题,当我们将 std::string 版本的记录存储到 std::string* StringArray 中进行重复数据删除时,STL 会制作 string 的深拷贝和mallocs 一个至少 160,000,000 字节的新缓冲区。我们很快耗尽了堆内存并得到了std::bad_alloc 异常

Stack Overflow 专家回答了建议使用更好的字符串类(例如 SGI 的 Ropes)的问题,因为 Ropes 尤其适用于处理非常大的字符串。所以我们下载了 SGI 的ropes.c 和rope.h 的一个版本。但是,我们无法在 Windows Visual Studio 2008 上编译ropes.c 和ropes.h。此外,我们找不到任何关于如何使用SGI C++ Ropes 接口的示例。

所以我们下载了 Paul Hsieh 的 Better String Library。我们修改了 STL 源代码以使用在 Better String 库中实现的 bstring 类。这是我们代码的摘录:

std::vector< bstring > BStringVector;

bstring b = bfromcstr(curr.getPtr());
char* const resultptr = (curr.getPtr() + n);
resultptr[STRING_SIZE] = '\x0';

BStringVector.push_back(b);
curr.mPtr = (char*)bstr2cstr(BStringVector.back(),' ');

std::multiset<Range>::iterator miter = ranges_type.lower_bound(Range(n));
(*miter).mPtr = curr.mPtr;

free (b);
return (char*)(resultptr); 

这个新代码生成的std::bad_alloc 异常少于STL string 类,但我们知道Ropes 是处理超大字符串的最佳类。所以我们需要知道如何在 Windows Visual Studio 2008 上使用 SGI 源代码。在 Ropes 代码中有很多 SGI 特定的头文件。对应的Windows Visual Studio 2008 C++头文件有哪些?

此外,在阅读了 Ropes 文档后,我们对于如何将 C/C++ char* 指针的以空结尾的内容转换为 Ropes 对象仍然没有 90% 的肯定。此外,我们如何将push_back 一个 Ropes 对象放到诸如vector 这样的 STL 容器上?最后,我们如何从 STL vector 容器中检索 Ropes 对象?谢谢。

【问题讨论】:

    标签: c++ windows linux string stl


    【解决方案1】:

    您是否只下载了两个实现文件?我怀疑这会起作用,因为它们很可能依赖于 SGI STL 实现中的其他文件。这可以解释为什么你不能构建它们......

    获得 SGI 绳索实现的最简单方法可能是使用STLport,它是 SGI STL 到多个平台的移植和进一步开发。虽然我没有尝试将它与 VS2008 一起使用,但我很确定它是受支持的。

    但是,您需要将 STLport 用作完整的 STL 替代品(确实如此),而不是提取一两个类并尝试将其与 VS2008 附带的 STL 实现一起使用。

    也就是说,除非您喜欢重写绳索类以使用 MS STL 开箱即用,但这对我来说听起来不是一个好主意。

    【讨论】:

    • 感谢您的回答。实际上我们昨晚确实下载了 STLport,但我们只提取了 1 或 2 个 Ropes 类。但是,现在您有没有建议我们用完整的 STLport 替换 Microsoft STL,我们必须构建一个新的 VisualStudio C++ 项目。感谢您的帮助。
    • 你知道我们在哪里可以找到一些关于如何使用绳索类的好文档吗?我们还没有找到太多关于 ROpes 的文档。有任何绳索邮件列表吗?谢谢,
    • 这里是一些好的 Ropes 文档的链接,sgi.com/tech/stl/Rope.html.> 谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-20
    • 2013-11-15
    • 1970-01-01
    • 1970-01-01
    • 2014-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多