2016-05-19 14 views
-2

次のコードスニペットを書いて、各文字列追加アクションによって文字列に追加されるメモリのバイト数を調べます。文字列の容量を増やす

#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バイト)を追加する方法です。

ありがとうございました。

+2

['std :: basic_string :: reserve'を使う](http://en.cppreference.com/w/cpp/string/basic_string/reserve) – Rakete1111

+0

@ Rakete1111:回答セクションを使用してください。 –

+0

@LightnessRacesinOrbit ok、私は:) – Rakete1111

答えて

3

reserve()メンバー機能を使用してこれを行うことができます。 要求した容量の正確な容量が割り当てられていない可能性があります(さらに多くの場合があります)が、の場合、を1回の割り当てで求めます。

2

ドキュメントを読む!

これはstd::string::reserveが対象です。

+0

私はあなたにそれを与えて引っ込めます。リンクが利用できなくなると、簡単なウェブ検索が行われます。 – user4581301

+0

ありがとう、このメソッドを見落としました。私もあなたの答えを受け入れることを願っています。 – packetie

関連する問題