A écrit l'extrait de code suivant pour trouver le nombre d'octets de mémoire supplémentaires que chaque chaîne ajoutera à la chaîne.Augmenter la capacité d'une chaîne
#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;
}
La sortie est
0
1
2
4
8
16
32
64
128
256
512
1024
Ainsi, le résultat tout à fait, il montre clairement doubles depots de la chaîne à chaque fois (au minimum). La question est, comment ajouter l'espace spécifié d'utilisation (par exemple, 2000 octets) à une chaîne existante de sorte que l'on puisse faire beaucoup de chaîne append sans déclencher un libre/malloc.
Merci.
[Utilisez 'std :: basic_string :: reserve'] (http://fr.cppreference.com/w/cpp/string/basic_string/reserve) – Rakete1111
@ Rakete1111: Utilisez la section des réponses. –
@ LightnessRacesinOrbit ok, je vais :) – Rakete1111