相关疑难解决方法(0)

从char*初始化std :: string而不复制

我有一种情况,我需要处理大量(许多GB)的数据量:

  1. 通过附加许多较小的(C char*)字符串来构建一个大字符串
  2. 修剪弦乐
  3. 将字符串转换为C++ const std :: string进行处理(只读)
  4. 重复

每次迭代中的数据都是独立的.

我的问题是,我想最小化(如果可能消除)堆分配的内存使用量,因为它目前是我最大的性能问题.

有没有办法将C字符串(char*)转换为stl C++字符串(std :: string),而不需要std :: string来内部分配/复制数据?

或者,我可以使用stringstreams或类似的东西来重用大缓冲区吗?

编辑:感谢您的回答,为清楚起见,我认为修改后的问题将是:

如何有效地构建(通过多个附加)一个stl C++字符串.如果在循环中执行此操作,其中每个循环完全独立,我如何重新使用此分配的空间.

c++ string memory-management stl

43
推荐指数
4
解决办法
2万
查看次数

内存高效的C++字符串(实习,绳索,写时复制等)

我的应用程序存在内存问题,包括复制大量字符串,使用与许多哈希表中的键相同的字符串等.我正在寻找我的字符串的基类,这使得它非常有效.

我希望:

  • 字符串实习(相同值的多个字符串使用相同的内存),
  • copy-on-write(我认为这几乎在所有std :: string实现中都是免费的),
  • 绳索的东西将是一个奖金(对于O(1) - 连接).

我的平台是Linux上的g ++(但这不太重要).

你知道这样的图书馆吗?

c++ string performance memory-management

12
推荐指数
3
解决办法
7073
查看次数

处理char缓冲区

作为一名C++程序员,我有时需要使用C语言处理内存缓冲区.例如:

char buffer[512];
sprintf(buffer, "Hello %s!", userName.c_str());
Run Code Online (Sandbox Code Playgroud)

或者在Windows中:

TCHAR buffer[MAX_PATH+1]; // edit: +1 added
::GetCurrentDirectory(sizeof(buffer)/sizeof(TCHAR), &buffer[0]);
Run Code Online (Sandbox Code Playgroud)

上面的示例是我通常如何创建本地缓冲区(本地堆栈分配的char数组).但是,有许多可能的变化,因此我对您对以下问题的答案非常感兴趣:

  • 传递缓冲区是否&buffer[0]比传递更好的编程风格buffer?(我更喜欢&buffer[0].)
  • 是否有一个被认为对堆栈分配缓冲区安全的最大大小?
    • 更新:我的意思是,例如,在Mac,Windows,Linux桌面(非移动设备!)上跨平台桌面应用程序可以认为是安全的最高值.
  • 静态缓冲区(static char buffer[N];)更快吗?是否还有其他论据支持或反对?
  • 使用静态缓冲区时,可以使用返回类型const char *.这(通常)是好还是坏?(我确实意识到调用者需要自己创建副本以避免下一次调用会改变之前的返回值.)
  • 如何使用static char * buffer = new char[N];,永远不要删除缓冲区并在每次调用时重复使用它.
  • 我知道在(1)处理大缓冲区或(2)编译时未知最大缓冲区大小时应使用堆分配.堆栈/堆分配决策中是否还有其他因素?
  • 如果你喜欢sprintf_s,memcpy_s......变种?(Visual Studio一直试图让我相信这一点很长时间,但我想要第二个意见:p)

c c++

8
推荐指数
2
解决办法
2万
查看次数

如何在c ++中重用字符串变量

这是正确的,它可以正常工作

string str("in.dat");
ifstream fin(str.c_str(), ios::binary | ios::ate );
.
.
.
//Do I need to clear the string before assigning new name???
str = "out.dat";
ofstream fout(str.c_str(), ios::binary); //seems to work
Run Code Online (Sandbox Code Playgroud)

问候

c++ string

2
推荐指数
1
解决办法
2285
查看次数

标签 统计

c++ ×4

string ×3

memory-management ×2

c ×1

performance ×1

stl ×1