次のコードスニペットを書いて、各文字列追加アクションによって文字列に追加されるメモリのバイト数を調べます。文字列の容量を増やす
#include <iostream>
#include <string>
#include <unordered_map>
#include <sys/time.h>
#include <arpa/inet.h>
using namespace std;
typedef unsigned short uint16;
typedef unsigned int uint;
int main (int argc, char *argv[]) {
const char *p = NULL;
string s = "";
for (int i=0; i<1050; i++) {
s += "a";
if (s.c_str() != p) {
printf("%5d\n", i);
p = s.c_str();
}
}
return 0;
}
出力
0
1
2
4
8
16
32
64
128
256
512
1024
は、その結果は非常に明確にそれを文字列(最低限)各回の二重ストレージを示しています。
質問は、空き/ mallocをトリガせずに多くの文字列を追加できるように、既存の文字列に指定されたスペース(たとえば2000バイト)を追加する方法です。
ありがとうございました。
['std :: basic_string :: reserve'を使う](http://en.cppreference.com/w/cpp/string/basic_string/reserve) – Rakete1111
@ Rakete1111:回答セクションを使用してください。 –
@LightnessRacesinOrbit ok、私は:) – Rakete1111