gpt4 book ai didi

c++ - 如何在 Windows Visual Studio 8.0 中使用 SGI Ropes?

转载 作者:太空宇宙 更新时间:2023-11-04 11:38:07 26 4
gpt4 key购买 nike

下午好,我们正在 Windows 和 Linux 上使用 C++ 构建重复数据删除程序的原型(prototype)。昨天,我们在 Stack Overflow 上发布了一个问题,内容是当我们将记录的 std::string 版本存储到 中去重时如何避免 STL string 深度复制>std::string* StringArray,STL 对 stringmalloc 进行深度复制,创建至少 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 接口(interface)的示例。

因此我们下载了 Paul Hsieh 的 Better String Library。我们修改了 STL 源代码以使用 Better String Libary 中实现的 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 文档之后,我们仍然没有 90% 确定如何将 C/C++ char* 指针的空终止内容转换为 Ropes 对象。此外,我们如何将一个 Ropes 对象push_back 到一个 STL 容器中,例如 vector?最后,我们如何从 STL vector 容器中检索 Ropes 对象?谢谢。

最佳答案

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

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

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

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

关于c++ - 如何在 Windows Visual Studio 8.0 中使用 SGI Ropes?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6076225/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com